Comment combinez-vous une jointure interne et externe dans mysql
-
05-07-2019 - |
Question
Je peux le faire dans Sybase et dans Oracle, mais je ne vois pas comment le faire dans mysql.
J'ai ceci: (veuillez vous abstenir de reformater mon sql, la dernière fois que quelqu'un a fait cela, il l'a changé, donc ce n'était pas la même chose et cela a donné un sens à la question)
select table1.id
from
table1
inner join
table2 on (table1.id = table2.id and table2.data='cat'),
table1 t1
left outer join
table3 on (t1.id = table3.id and table3.data = 'dog')
Et j'obtiens toutes sortes de résultats qui n'ont aucun sens.
Je veux obtenir une liste de tous les identifiants de table1 où table2.data = cat, puis faire une jointure externe avec les résultats de celle de la table 3 où table3.data = chien.
Je remarque que je ne peux pas spécifier la même table / alias pour table1 dans les deux clauses de jointure, ce qui me laisse donc supposer que mysql exécute les expressions de jointure séparément et que les résultats sont combinés ensemble ou quelque chose du genre.
J'ai également essayé de supprimer le "joint interne". dans la section from et en le mettant dans la clause where, cela ne fonctionne pas non plus, bien que cela ne fonctionne pas de manière différente (résultats erronés différents)
Cela serait si facile sous sybase ou oracle.
Qu'est-ce que je fais de travers?
La solution
select table1.id
from
table1
inner join
table2 on (table1.id = table2.id and table2.data='cat')
left outer join
table3 on (table1.id = table3.id and table3.data = 'dog')
Je pense que vous ne voulez jamais utiliser une virgule dans l'instruction from. Je crois que la virgule est équivalente à dire cross join. Pas sûr cependant, mais je pense que cette requête est ce que vous recherchez.