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 :

[jointure]requete possible de double jointure entre 2 tables


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut [jointure]requete possible de double jointure entre 2 tables
    J'ai un probleme de double jointure entre 2 tables a soumettre :

    Soit mes 2 tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    CREATE TABLE NOEUD
    (
        ID_NOEUD INT NOT NULL AUTO_INCREMENT,
        LABEL_NOEUD CHAR(30),
        PRIMARY KEY(ID_NOEUD)
    );
    CREATE TABLE LIEN
    (
        ID_LIEN INT NOT NULL AUTO_INCREMENT,
        LABEL_LIEN CHAR(30),
        NOEUD_SOURCE INT,
        NOEUD_DESTINATION INT,
        PRIMARY KEY(ID_LIEN),
        INDEX SOURCE(NOEUD_SOURCE),
        INDEX DESTINATION(NOEUD_DESTINATION),
        FOREIGN KEY(NOEUD_SOURCE)
              REFERENCES NOEUD(ID_NOEUD),
        FOREIGN KEY(NOEUD_DESTINATION)
              REFERENCES NODE(ID_NOEUD)
    );
    avec les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO NOEUD (LABEL_NOEUD) VALUES (noeud A'),('noeud B')(noeud C');
    INSERT INTO LIEN (LABEL_LIEN,NOEUD_SOURCE,NOEUD_DESTINATION) VALUES ('lien1','1','2'),('lien2','1','3')
    la table LIEN renseigne sur les liens existants entre 2 noeuds avec un double referencement vers la table NOEUD pour le noeud source du lien et le noeud destination du lien.

    je souhaite alors afficher par une unique requete, dans le meilleur des cas, les informations contenues dans ma table LIEN de la maniere suivante :
    - la cle du lien (ID_LIEN)
    - le label du lien (LABEL_LIEN)
    - au lieu d'afficher l'entier correspondant a la cle du noeud source, je veux afficher son label dans la table NOEUD
    - au lieu d'afficher l'entier correspondant a la cle du noeud destination, je veux afficher son label dans la table NOEUD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Resultat
    ID_LIEN  LABEL_LIEN  NOEUD_SOURCE  NOEUD_DESTINATION
    -------  ----------  ------------  ------------------
    1        lien1       noeud A       noeud B
    2        lien2       noeud A       noeud C
    Etant donne qu'il y a un double referencement allant de la table LIEN vers la table NOEUD, est-il possible de recuperer toutes ces informations en une seule requete ? A priori il me semble que non, j'ai donc opte pour une solution intermediaire :
    - une premiere requete qui me donne --> ID_LIEN, LABEL_LIEN, LABEL_NOEUD avec une jointure avec la condition NOEUD_SOURCE = ID_NOEUD
    - une seconde requete qui me donne --> LABEL_NOEUD avec une jointure avec la condition NOEUD_DESTINATION = ID_NOEUD

    Enfin je rassemble les 2 resultats en un seul (j'ai une interface java dialoguant avec le serveur BD qui s'occupe tres bien de faire ca).

    Je voulais savoir si ce resultat etait possible en une seule requete.

    Merci. @+

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Un truc comme ca t'irai pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT 
    ID_LIEN,
    A.LABEL_NOEUD,
    B.LABEL_NOEUD 
    FROM 
    LIEN L,
    NOEUD A, 
    NOEUD B 
    WHERE 
    L.NOEUD_SOURCE=A.ID_NOEUD 
    AND L.NOEUD_DESTINATION=B.ID_NOEUD;

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    tres joli la manip, j'aurais surtout pas penser a faire ca, je viens de l'essayer ca marche impeccable

    Merci beaucoup .

    @+

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    merci ;-)

    Pense à cliquer sur le bouton "Résolu" en bas à gauche :-)

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    pas tres vif pour le resolu, desole

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

Discussions similaires

  1. Jointure et somme d'un produit entre deux tables
    Par juliensfm dans le forum Langage SQL
    Réponses: 30
    Dernier message: 07/05/2015, 15h09
  2. [Requete] Probleme avec double jointure et cast
    Par guromgd dans le forum Développement
    Réponses: 5
    Dernier message: 04/05/2009, 13h42
  3. Double relation entre 2 tables
    Par bibicalou dans le forum Modélisation
    Réponses: 4
    Dernier message: 19/03/2009, 14h20
  4. Réponses: 3
    Dernier message: 04/06/2008, 10h19
  5. double relation entre 2 table : faisable ?
    Par tiger33 dans le forum Schéma
    Réponses: 1
    Dernier message: 10/12/2006, 23h58

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