Comment combinez-vous une intérieure et extérieure de la rejoindre dans mysql
Je peux le faire dans sybase et je peux le faire dans oracle, mais je ne vois pas comment faire dans mysql.
J'ai obtenu ceci:
(veuillez limiter vous-même à partir de re-formatage de mon sql, la dernière fois que quelqu'un l'a fait qu'ils ont changé de sorte qu'il n'était pas le même et en fait la question de sens)
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 je reçois toutes sortes de résultats qui n'ont pas de sens.
Je veux obtenir une liste de tous les id de la table table1 où table2.données = chat, puis faire une jointure externe avec les résultats de cette contre le tableau 3 où tableau3.données = chien.
Je remarque que je ne peux pas spécifier la même table/alias pour table1 dans les deux clauses de jointure, donc ce qui m'amène à croire que mysql est en cours d'exécution les expressions de jointure séparément et ORing les résultats de l'ensemble ou quelque chose comme ça.
J'ai aussi essayé de se débarrasser de l ' "inner join" dans la section de, et de le mettre dans la clause where, qui ne fonctionne pas non plus, même si cela n'a pas de travail d'une manière différente (a différents des résultats erronés)
Ce serait si facile de sybase ou oracle.
Ce que je fais mal?
OriginalL'auteur stu | 2009-01-08
Vous devez vous connecter pour publier un commentaire.
Je pense que vous ne voulez pas utiliser une virgule dans la déclaration. Je crois que la virgule est équivalent à dire jointure croisée. Pas sûr, mais je pense que cette requête est ce que vous cherchez.
Correct que vous ne voulez pas mélanger virgule de la syntaxe SQL-89) et de la syntaxe de JOINTURE (SQL-92) dans la même requête. Bien que l'analyseur permet, il peut causer de la confusion des interactions, car la virgule est inférieur priorité que de se JOINDRE.
C'est une façon intéressante de voir les choses, mais oui, je suppose que la virgule est équivalent à une croisée de jointure qui est, comme le projet de Loi dit, puis marqués par les conditions de jointure dans la clause where. La virgule formulaire de pré-dates de la JOINTURE des notations par une grande marge. (Et bien repéré, Shawn!)
OriginalL'auteur Shawn