Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Daten abfragen und ändern » Joins: Daten aus mehreren Tabellen abrufen » Explizite Join-Bedingungen (ON-Klausel)

 

Tabellen in einer ON-Klausel referenzieren

Die Tabellen, die in einer ON-Klausel referenziert werden, müssen Teil des Joins sein, den die ON-Klausel ändert. Folgende Anweisung ist z.B. ungültig:

FROM ( A KEY JOIN B ) JOIN ( C JOIN D ON A.x = C.x )

Das Problem ist hier, dass die Join-Bedingung A.x = C.x Tabelle A referenziert, die nicht Teil des Joins ist, den die Bedingung modifiziert (in diesem Fall C JOIN D).

Im ANSI/ISO-Standard SQL99 und in Adaptive Server Anywhere 7.0 gibt es jedoch eine Ausnahme zu dieser Regel: Wenn Sie Kommas zwischen den Tabellenausdrücken verwenden, kann eine ON-Bedingung eines Joins eine Tabelle referenzieren, die ihr syntaktisch in der FROM-Klausel vorausgeht. Folgende Anweisung ist daher gültig:

FROM (A KEY JOIN B) , (C JOIN D ON A.x = C.x)

Weitere Hinweise zu Kommas finden Sie unter Kommas.

Beispiel

Im folgenden Beispiel werden die Tabellen "SalesOrders" und "Employees" durch einen Join verknüpft. Jede Zeile im Ergebnis reflektiert die Zeilen in der Tabelle "SalesOrders", bei denen der Wert der Spalte "SalesRepresentative" mit dem Wert der Spalte "EmployeeID" in der Tabelle "Employees" übereinstimmt.

SELECT Employees.Surname, SalesOrders.ID, SalesOrders.OrderDate
FROM SalesOrders 
JOIN Employees
ON SalesOrders.SalesRepresentative = Employees.EmployeeID;
Surname ID OrderDate
Chin 2008 02.04.2001
Chin 2020 04.03.2001
Chin 2032 05.07.2001
Chin 2044 15.07.2000
Chin 2056 15.04.2001
... ... ...

Es folgen einige Hinweise zu diesem Beispiel:

  • Die Ergebnisse dieser Abfrage enthalten nur 648 Zeilen (eine für jede Zeile in der Tabelle "SalesOrders"). Von den 48.600 Zeilen in dem Kreuzprodukt enthalten nur 648 in den beiden Tabellen dieselbe Mitarbeiternummer.

  • Die Reihenfolge der Ergebnisse ist ohne Bedeutung. Sie können eine ORDER BY-Klausel hinzufügen, um der Abfrage eine bestimmte Reihenfolge aufzuzwingen.

  • Die ON-Klausel schließt Spalten mit ein, die nicht in der endgültigen Ergebnismenge enthalten sind.