J'ai un probleme de double jointure entre 2 tables a soumettre :
Soit mes 2 tables :
avec les données suivantes :
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) );
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.
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')
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
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 :
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
- 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. @+
Partager