Wenn auf mindestens einer Seite eines natürlichen Joins ein Ausdruck enthalten ist, der sich auf mehrere Tabellen bezieht, generiert SQL Anywhere eine Join-Bedingung, indem die Spaltengruppe auf den beiden Seiten des Join-Operators verglichen und nach Spalten gesucht wird, die denselben Namen haben.
Beispiel:
SELECT * FROM (A JOIN B) NATURAL JOIN (C JOIN D); |
Diese Anweisung enthält zwei Tabellenausdrücke. Die Spaltennamen im Tabellenausdruck A JOIN B
werden mit den Spaltennamen im Tabellenausdruck C JOIN D
verglichen, und für jedes unzweideutige Paar übereinstimmender Spaltennamen wird eine Join-Bedingung erstellt. Ein unzweideutiges Paar übereinstimmender Spalten bedeutet, dass der Spaltenname in beiden Tabellenausdrücken, nicht aber zwei Mal in demselben Tabellenausdruck vorkommt.
Wenn ein Paar zweideutiger Spaltennamen vorhanden ist, wird ein Fehler ausgegeben. Ein Spaltenname kann in einem Tabellenausdruck jedoch zwei Mal enthalten sein, sofern er nicht mit dem Namen einer Spalte aus dem anderen Tabellenausdruck übereinstimmt.
Wenn auf mindestens einer Seite eines natürlichen Joins eine Liste von Tabellenausdrücken vorhanden ist, wird für jeden Tabellenausdruck in der Liste eine eigene Join-Bedingung generiert.
Sie haben z.B. folgende Tabellen:
Tabelle A enthält die Spalten a, b und c.
Tabelle B enthält die Spalten a und d.
Tabelle C enthält die Spalten d und c.
In diesem Fall bewirkt der Join (A,B) NATURAL JOIN C
, dass SQL Anywhere zwei Join-Bedingungen generiert:
ON A.c = C.c AND B.d = C.d |
Wenn kein gemeinsamer Spaltenname für A-C oder B-C vorhanden ist, wird ein Fehler ausgegeben.
Wenn Tabelle C die Spalten a, d und c enthält, ist der Join (A,B) NATURAL JOIN C
ungültig. Dies liegt daran, dass Spalte a in allen drei Tabellen vorkommt und der Join daher zweideutig ist.
Folgendes Beispiel beantwortet die Frage: Für jeden Verkauf werden Informationen darüber bereitgestellt, was von wem verkauft wurde.
SELECT * FROM ( Employees KEY JOIN SalesOrders ) NATURAL JOIN ( SalesOrderItems KEY JOIN Products ); |
Das ist äquivalent zu Folgendem
SELECT * FROM ( Employees KEY JOIN SalesOrders ) JOIN ( SalesOrderItems KEY JOIN Products ) ON SalesOrders.ID = SalesOrderItems.ID; |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |