Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mischen von ANSI 1992 JOINs und COMMAs in einer Abfrage

Gemäß diesem Link , sollten Sie beim Aufbau von Joins nicht beide Schreibweisen verwechseln. Das Komma, das Sie verwenden, um memebers as m, telephone as t , und die nachfolgenden Aufrufe von inner join , lösen den unbekannten Spaltenfehler aus.

Um damit umzugehen, verwenden Sie CROSS/INNER/LEFT JOIN statt Kommas.

Zuvor hatten der Kommaoperator (,) und JOIN beide denselben Vorrang, sodass der Join-Ausdruck t1, t2 JOIN t3 als ((t1, t2) JOIN t3) interpretiert wurde. Jetzt hat JOIN einen höheren Vorrang, sodass der Ausdruck als (t1, (t2 JOIN t3)) interpretiert wird. Diese Änderung wirkt sich auf Anweisungen aus, die eine ON-Klausel verwenden, da diese Klausel nur auf Spalten in den Operanden des Joins verweisen kann und die Änderung der Priorität die Interpretation dieser Operanden ändert.

Aus pädagogischen Gründen füge ich die Abfrage so hinzu, wie sie meiner Meinung nach lauten sollte:

SELECT m.*, t.*
FROM memebers as m 
    JOIN telephone as t
    JOIN memeberFunctions as mf ON m.id = mf.memeber AND mf.function = 32
    JOIN mitgliedTelephone as mt ON m.id = mt.memeber

Da Sie t nicht beitreten und m , ist das Endergebnis ein kartesisches Produkt; Vielleicht möchten Sie, dass es überarbeitet wird.

Ich hoffe, es hat geholfen.