J'ai eu le dessous de la requête de travail en mysql 4.1, mais pas dans la version 5.0:
SELECT * FROM email e, event_email ee
LEFT JOIN member m on m.email=e.email
WHERE ee.email_id = e.email_id
L'erreur:
1054 (Unknown column 'e.e-mail' dans 'clause')
OriginalL'auteur Neil | 2010-05-12
Vous pouvez uniquement consulter les tables déjà rejoint avec le
JOIN
clause dans leON
clause.Ceci peut être illustré mieux si je mets les guillemets autour de la
ANSI JOINS
dans votre requête d'origine:Comme vous pouvez le voir, il n'y a pas de source pour
e.email
à l'intérieur des citations: c'est pourquoi il n'a pas pu être résolu.OriginalL'auteur Quassnoi
De Documentation de MySQL page
Précédemment, l'opérateur virgule (,) et JOINDRE les deux avaient la même priorité, l'expression de la jointure t1, t2 REJOINDRE t3 a été interprété comme ((t1, t2) JOIGNEZ-vous à t3). Maintenant se JOINDRE a une priorité plus élevée, donc l'expression est interprétée comme (t1, t2 REJOINDRE t3)). Ce changement affecte les états qui utilisent une clause, parce que la clause ne peuvent se référer qu'à des colonnes dans les opérandes de la jointure, et le changement dans l'ordre de priorité des modifications de l'interprétation de ces opérandes sont.
Exemple:
Précédemment, SÉLECTIONNEZ était légal en raison de l'implicite groupement de t1,t2 en tant que (t1,t2). Maintenant, la JOINTURE est prioritaire, donc les opérandes de la clause sont des t2 et t3. Parce que t1.i1 n'est pas une colonne de l'une des opérandes, le résultat est un Inconnu de la colonne 't1.i1' dans 'clause' erreur. Pour permettre à la rejoindre pour être traitées, groupe les deux premières tables explicitement à l'aide de parenthèses, de sorte que les opérandes de la clause sont (t1,t2) et t3:
Sinon, éviter l'utilisation de l'opérateur virgule et l'utilisation REJOINDRE la place:
Ce changement s'applique également aux déclarations qui mélange l'opérateur virgule avec une JOINTURE INTERNE, CROSS JOIN, LEFT JOIN et RIGHT JOIN, qui ont une priorité supérieure à celle de l'opérateur virgule.
OriginalL'auteur horas_ro
La réponse serait de placer l'instruction de JOINTURE directement après la table dans la déclaration, parce que c'est la table que vous rejoindre sur:
OriginalL'auteur Daan