Es ist auch erwähnenswert, dass Sie bei Verwendung USING
möglicherweise eine andere Ergebnismenge erhalten als bei a JOIN
. Lesen Sie den unten zitierten Abschnitt in der JOIN-Dokumentation :
Join Processing Changes in MySQL 5.0.12
Hinweis:
Natürliche Verknüpfungen und Verknüpfungen mit USING, einschließlich äußerer Verknüpfungsvarianten, werden gemäß dem SQL: 2003-Standard verarbeitet. Ziel war es, die Syntax und Semantik von MySQL in Bezug auf NATURAL JOIN und JOIN ... USING gemäß SQL: 2003 anzupassen. Diese Änderungen in der Join-Verarbeitung können jedoch bei einigen Joins zu unterschiedlichen Ausgabespalten führen. Außerdem müssen einige Abfragen, die in älteren Versionen (vor 5.0.12) anscheinend ordnungsgemäß funktionierten, neu geschrieben werden, um dem Standard zu entsprechen.
Diese Änderungen haben fünf Hauptaspekte:
Die Art und Weise, wie MySQL die Ergebnisspalten von NATURAL- oder USING-Verknüpfungsoperationen bestimmt (und damit das Ergebnis der gesamten FROM-Klausel).
Erweiterung von SELECT * und SELECT tbl_name. * In eine Liste ausgewählter Spalten.
Auflösung von Spaltennamen in NATURAL- oder USING-Joins.
Die Transformation von NATURAL oder USING wird zu JOIN ... ON.
Auflösung von Spaltennamen im ON-Zustand eines JOIN ... ON.
Die interessanteste Änderung ist vielleicht die (jetzt zitiert aus der Dokumentation)
LEFT JOIN b USING (c1,c2,c3)
LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3
sind nicht mehr ganz gleich, was die Bestimmung betrifft, welche Spalten zur SELECT *
Erweiterung angezeigt werden sollen . Der USING
Join wählt den zusammengeführten Wert der entsprechenden Spalten aus, während der ON
Join alle Spalten aus allen Tabellen auswählt. Wählt für den vorhergehenden USING
Join SELECT *
die folgenden Werte aus:
COALESCE(a.c1,b.c1), COALESCE(a.c2,b.c2), COALESCE(a.c3,b.c3)
Wählt für den ON
Join SELECT *
die folgenden Werte aus:
a.c1, a.c2, a.c3, b.c1, b.c2, b.c3
Bei einem inneren Join COALESCE(a.c1,b.c1)
ist dies dasselbe wie entweder a.c1
oder b.c1
weil beide Spalten denselben Wert haben. Bei einer äußeren Verknüpfung (z. B. LEFT JOIN
) kann eine der beiden Spalten sein NULL
. Diese Spalte wird im Ergebnis weggelassen.