Je déteste l'admettre par ma connaissance de MySQL qui manque aux requêtes plus complexes. Essentiellement, j'ai quatre tables dont deux contiennent les données que je veux retourner, et deux sont des tables relationnelles reliant les données. Table A
est présent uniquement pour fournir une charge pour Table D.aID
.Mysql JOIN de quatre tables avec deux tables clés
+--------+ +--------+ +--------+ +-----------+ +-----------+
|Table A | |Table B | |Table C | | Table D | | Table E |
+---+----+ +---+----+ +---+----+ +---+---+---+ +---+---+---+
|aID|name| |bID|name| |cID|name| |dID|aID|bID| |eID|dID|cID|
+---+----+ +---+----+ +---+----+ +---+---+---+ +---+---+---+
| 1 | a_1| | 1 | b_1| | 1 | c_1| | 1 | 1 | 1 | | 1 | 1 | 1 |
+---+----+ | 2 | b_2| | 2 | c_2| | 2 | 1 | 2 | | 1 | 1 | 2 |
+---+----+ | 3 | c_3| +---+---+---+ +---+---+---+
+---+----+
La relation créée avec ces tables est: Table A > Table B > Table C
. Les données que je souhaite appartiennent à la catégorie Table B > Table C
.
+--------+---------+--------+---------+
|tblB.bID|tblB.name|tblC.cID|tblC.name|
+--------+---------+--------+---------+
| 1 | a_1 | 1 | c_1 |
| 1 | a_1 | 2 | c_2 |
| 2 | a_2 | NULL | NULL |
+--------+---------+--------+---------+
Cependant, pour assurer que je suis la bonne voie, je dois saisir l'Table B
de la relation Table A > Table B
Table C
appartient. Je me rends compte que je rends les choses beaucoup plus difficiles pour moi-même en permettant des valeurs name
en double, mais je préfère avoir des petites tables et des requêtes plus complexes que des tableaux gonflés et des requêtes plus simples. La requête que j'utilise est
SELECT * FROM `Table E`
LEFT JOIN `Table D` ON (`Table B`.bID = `Table D`.bID)
RIGHT JOIN `Table E` ON (`Table D`.dID = `Table E`.dID))
RIGHT JOIN `Table C` ON (`Table E.cID = `Table C`.cID);
Cependant, jusqu'à présent, cela n'a pas fonctionné. Lorsque la requête est soumise, cette erreur est renvoyée:
ERROR 1066 (42000): Not unique table/alias: 'Table D'
Des idées sur la façon dont cela fonctionne? Est-ce seulement possible?
Comme vous avez mentionné vouloir des requêtes simples (et depuis vos colonnes clés ont un nom correspondant) vous souhaitera peut-être envisager de remplacer 'sur (tablex.xID = tabley.xID)' 'avec l'aide xID'. –
Je ne savais pas que je pouvais le faire. Merci pour ce conseil. –