IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête sur plusieurs tables


Sujet :

Langage SQL

  1. #1
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut Requête sur plusieurs tables
    Bonjour,

    je fais une requête sur plusieurs tables.

    select distinct champ1, champ2, champ3 from table1, table2, table3, table4
    where ...

    Problème: je reçois énormément de fois le même enregistrement (la même ligne) malgré le mot-clé distinct. J'imagine qu'il faudrait que je fasse une jointure, mais je ne sais pas trop comment ça marche. Faut-il que ma jointure soit externe ?

    Je souhaiterais ne plus avoir aucune ligne en double...

    Merci

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    A priori, tu fais un produit cartésien (cf http://sql.developpez.com/sqlaz/jointures/#L2.5)

    A quelle table les champs champ1, champ2, champ3 appartiennent-ils ? Tu as 4 tables dans ta requêtes, donc tu devrais avoir 3 conditions de jointure (cas basique).
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  4. #4
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Merci Xo.

    Je pense que c'est bien ça qu'il me faut. Mais Oracle ne permet pas de faire un CROSS JOIN...

    Je vais sur le forum Oracle

    Merci encore...

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par drinkmilk
    Je pense que c'est bien ça qu'il me faut. Mais Oracle ne permet pas de faire un CROSS JOIN...
    cf lien donné par Magnus, tu as l'article complet ... qu'il faut lire jusqu'au bout :
    (1) Oracle ne connais toujours pas le JOIN (ça fait quand même plus de dix ans de retard pour cet éditeur pionnier qui semble s'endormir sur ses lauriers). Il faut donc utiliser une syntaxe propriétaire. Exception : la version 9 supporte enfin les jointures normalisées.
    Citation Envoyé par drinkmilk
    Je vais sur le forum Oracle
    Si c'est pour demander comment faire une jointure, j'ai peur que tu te fasses recevoir

    Les tables de ta requête doivent être liées, pour que tu veuilles faire une requête dessus. Les jointures sont en général facilement codable, car indiquées par les champs FK

    Ex :
    Table 1 : id1, champ1
    Table 2 (fille de Table1) : id2, champ2, ref1 (FK vers id1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Ta requête s'écrira :
    SELECT champ1, champ2
      FROM Table1, Table2
     WHERE ref1 = id1
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Je pense que c'est bien ça qu'il me faut. Mais Oracle ne permet pas de faire un CROSS JOIN...

    cf lien donné par Magnus, tu as l'article complet ... qu'il faut lire jusqu'au bout :

    (1) Oracle ne connais toujours pas le JOIN (ça fait quand même plus de dix ans de retard pour cet éditeur pionnier qui semble s'endormir sur ses lauriers). Il faut donc utiliser une syntaxe propriétaire. Exception : la version 9 supporte enfin les jointures normalisées.
    je l'avais bien vu cette petite remarque, mais je suis sous Oracle 8i (8.1.7). Donc ce qui m'intéresse, c'est de trouver la "syntaxe propriétaire" dont l'article parle.

    Qu'est ce que c'est un champ FK ?

    Merci

  7. #7
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    En fait il ne s'agit pas d'1 syntaxe propriétaire, mais plutôt d'1 'perversion' de la grammaire sql.
    Au lieu de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1 (inner ou left ou right) join table2 on pk = fk
    tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select  * from table1, table2 where table1.pk = table2.fk
    .
    Mais je te rassure, même si l'utilisation de la syntaxe normée se répand, il y pas mal de dev. (et même des profs. de fac) qui 'hallucinent' qd tu leur montre du sql avec des join.
    (Perso., g même eu droit à 1
    ici, on ne génère notre sql avec access. Réécris ça proprement stp.
    , ça ne s'invente pas !).

    PK = Primary Key, clef primaire d'1 table.
    FK = Foreign Key, clef étrangère = la clef primaire d'1 autre table.

    A +

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    bonjour,
    Qu'est ce que c'est un champ FK ?
    Un champ Foreign key soit en bon français clé étrangère, c'est à dire que la valeur d'un champ C 2 d'une table T2 dont la valeur doit se trouver dans la table T1 pour le champ C1.
    En général C1 et C2 on le même nom .
    je l'avais bien vu cette petite remarque, mais je suis sous Oracle 8i (8.1.7). Donc ce qui m'intéresse, c'est de trouver la "syntaxe propriétaire" dont l'article parle.
    Pour toi ce doit être une jointure simple, donc tout simplement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT C1, champ2, champ3 from T1, T2 where T1.C1=T2.C2
    [Edit]grillé[/edit]
    A+
    Soazig

  9. #9
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Merci bien pour vos réponses et toutes les précisions que vous donnez. Mon problème est maintenant résolu.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. faire une requête sur plusieurs tables
    Par julien.63 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 16/08/2006, 22h58
  2. suite au problème de requête sur plusieur table
    Par michelGProuq dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/07/2006, 16h19
  3. [VB6] RecordSet, Oracle, requête sur plusieurs Tables
    Par pier* dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 13/04/2006, 10h19
  4. Requête sur plusieurs tables
    Par sta_schmitt dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/03/2006, 13h54
  5. Requéte sur plusieurs tables
    Par polux23 dans le forum Requêtes
    Réponses: 11
    Dernier message: 23/02/2006, 23h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo