Comment faites-vous plusieurs à plusieurs tables de jointures externes?
J'ai 3 tables, foo, foo2bar, et d'un bar. foo2bar est un de nombreux de nombreux de la carte entre les foo et bar. Voici le contenu.
select * from foo
+------+
| fid |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
select * from foo2bar
+------+------+
| fid | bid |
+------+------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
| 4 | 4 |
+------+------+
select * from bar
+------+-------+------+
| bid | value | zid |
+------+-------+------+
| 1 | 2 | 10 |
| 2 | 4 | 20 |
| 3 | 8 | 30 |
| 4 | 42 | 30 |
+------+-------+------+
Ce que je veux pour demande est, "Donnez-moi une liste de tous les fid et des valeurs zid de 30"
J'attends une réponse pour toutes les ficelles, de sorte que le résultat pourrait ressembler à:
+------+--------+
| fid | value |
+------+--------+
| 1 | null |
| 2 | 8 |
| 3 | null |
| 4 | 42 |
+------+--------+
source d'informationauteur Pyrolistical
Vous devez vous connecter pour publier un commentaire.
Testé sur MySQL 5.0.51.
Ce n'est pas une sous-requête, on utilise des parenthèses pour préciser l'ordre de préséance des jointures.
non testé
Si vous n'obtenez pas de retour une ligne fid = 3, alors votre serveur est cassé.
Ce code devrait faire ce que je pense que vous voulez:
Garder à l'esprit qu'il est possible d'obtenir deux valeurs pour un fid si elle est liée à deux bars avec un zid de 30.
De travail, vous pouvez commencer avec votre sélection. Ne pas inclure les colonnes que vous ne voulez pas en fin de compte voir.
Alors nous pouvons faire la clause where, qui peut voir, c'est juste que vous avez exprimé.
Maintenant la partie la plus délicate pour connecter des choses ensemble pour nos clause from, à l'aide de GAUCHE Rejoint parce que nous voulons voir tous les fid, si oui ou non il y a des intermédiaires correspond à:
FWIW, la question n'est pas vraiment à propos de plusieurs-à-plusieurs: cela pourrait tout simplement être fait, comme une union.
Un réel plusieurs-à-plusieurs dans SQL est un LA CROIX REJOINDRE