Bei der Arbeit mit Code in einer Standard-MySQL-Datenbank bin ich auf folgende Aussage gestoßen:
SELECT * FROM foo LEFT JOIN bar USING ('bar_id') WHERE foo_id = 1
Was mich wirft ist: Wofür ist es USING
, was macht es?
Meine erste Annahme war, dass es sich um die Arbeit mit Fremdschlüsseln oder möglicherweise Indizes handelte, aber das DB-Schema enthält keine Hinweise auf Fremdschlüssel oder Indizes.
Mein GoogleFU hat mich im Stich gelassen, wahrscheinlich weil USING
es in den meisten Texten auf Websites so häufig vorkommt. Ich frage mich also, ob die DB-Gurus etwas Licht ins Dunkel bringen könnten, bevor ich diese und mehrere andere Abfragen in diesem Code ändern möchte.
Es ist auch erwähnenswert, dass Sie bei Verwendung
USING
möglicherweise eine andere Ergebnismenge erhalten als bei aJOIN
. Lesen Sie den unten zitierten Abschnitt in der JOIN-Dokumentation :Die interessanteste Änderung ist vielleicht die (jetzt zitiert aus der Dokumentation)
sind nicht mehr ganz gleich, was die Bestimmung betrifft, welche Spalten zur
SELECT *
Erweiterung angezeigt werden sollen . DerUSING
Join wählt den zusammengeführten Wert der entsprechenden Spalten aus, während derON
Join alle Spalten aus allen Tabellen auswählt. Wählt für den vorhergehendenUSING
JoinSELECT *
die folgenden Werte aus:Wählt für den
ON
JoinSELECT *
die folgenden Werte aus:Bei einem inneren Join
COALESCE(a.c1,b.c1)
ist dies dasselbe wie entwedera.c1
oderb.c1
weil beide Spalten denselben Wert haben. Bei einer äußeren Verknüpfung (z. B.LEFT JOIN
) kann eine der beiden Spalten seinNULL
. Diese Spalte wird im Ergebnis weggelassen.quelle
SELECT *