Die Reihenfolge von Joins ist wichtig, wenn der Tabellenausdruck Outer-Joins enthält. A JOIN B LEFT OUTER JOIN C
wird beispielsweise als (A JOIN B) LEFT OUTER JOIN C
interpretiert. Der Tabellenausdruck (A JOIN B)
wird mit C verknüpft. Der Tabellenausdruck (A JOIN B)
wird beibehalten und Tabelle C liefert auch Nullwerte.
In folgender Anweisung werden die Tabellen A, B und C verknüpft:
SELECT * FROM A LEFT OUTER JOIN B RIGHT OUTER JOIN C; |
Um diese Anweisung zu verstehen, muss berücksichtigt werden, dass SQL Anywhere Anweisungen von links nach rechts auswertet und Klammern hinzufügt. Das ergibt folgende Anweisung:
SELECT * FROM (A LEFT OUTER JOIN B) RIGHT OUTER JOIN C; |
Anschließend sollten Sie den Rechts-Outer-Join in einen Links-Outer-Join umwandeln, sodass beide Joins vom selben Typ sind. Hierzu drehen Sie einfach die Position der Tabellen im Rechts-Outer-Join um, wodurch Sie folgendes Ergebnis erhalten:
SELECT * FROM C LEFT OUTER JOIN (A LEFT OUTER JOIN B); |
A ist die beibehaltene Tabelle und B ist die Nullwert-liefernde Tabelle für den verschachtelten Outer-Join. C ist die beibehaltene Tabelle für den ersten Outer-Join.
Sie können diesen Join folgendermaßen interpretieren:
A wird mit B verknüpft, wobei alle Zeilen in A beibehalten werden.
Anschließend wird C mit den Ergebnissen des Joins von A und B verknüpft, wobei alle Zeilen in C beibehalten werden.
Der Join enthält keine ON-Klausel und ist daher standardmäßig ein Schlüssel-Join.
Außerdem darf die Join-Bedingung für einen Outer-Join nur Tabellen enthalten, die zuvor in der FROM-Klausel referenziert wurden. Diese Einschränkung entspricht dem ANSI/ISO-Standard und wird erzwungen, um Mehrdeutigkeiten zu vermeiden. Folgende Anweisungen sind z.B. syntaktisch falsch, da C in der Join-Bedingung referenziert wird, bevor die Tabelle selbst referenziert wird.
SELECT * FROM (A LEFT OUTER JOIN B ON B.x = C.x) JOIN C; |
SELECT * FROM A LEFT OUTER JOIN B ON A.x = C.x, C; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |