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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top