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 » Inner- und Outer-Joins » Outer-Joins

 

Outer-Joins und Join-Bedingungen

Ein häufiger Fehler bei der Verwendung von Outer-Joins ist die Positionierung der Join-Bedingung. Wenn Sie Einschränkungen für die Nullwert-liefernde Tabelle in einer WHERE-Klausel angeben, ist der Join in den meisten Fällen gleichwertig zu einem Inner-Join.

Das liegt daran, dass die meisten Suchbedingungen nicht als TRUE ausgewertet werden können, wenn eine ihrer Eingaben NULL ist. Die Einschränkungen der WHERE-Klausel für die Nullwert-liefernde Tabelle vergleicht Werte mit NULL, was zum Ausschluss der betreffenden Zeile aus der Ergebnismenge führt. Die Zeilen in der beibehaltenen Tabelle werden nicht beibehalten, wodurch der Join ein Inner-Join wird.

Eine Ausnahme bilden Vergleiche, die als TRUE ausgewertet werden, wenn eine der Eingaben NULL ist. Dazu zählen IS NULL, IS UNKNOWN, IS FALSE, IS NOT TRUE und Ausdrücke, die ISNULL oder COALESCE enthalten.

Beispiel

Die nachstehende Anweisung berechnet z.B. einen Links-Outer-Join:

SELECT *
FROM Customers KEY LEFT OUTER JOIN SalesOrders
   ON SalesOrders.OrderDate < '2000-01-03';

Folgende Anweisung erstellt dagegen einen Inner-Join:

SELECT Surname, OrderDate
FROM Customers KEY LEFT OUTER JOIN SalesOrders
   WHERE SalesOrders.OrderDate < '2000-01-03';

Die erste dieser beiden Anweisungen kann man sich wie folgt vorstellen: Zuerst wird in einem Links-Outer-Join die Tabelle "Customers" mit der Tabelle "SalesOrders" verknüpft. Die Ergebnismenge umfasst alle Zeilen in der Tabelle "Customers". Für diejenigen Kunden, die keine Bestellung vor dem 3. Januar 2000 aufgegeben haben, werden die Felder für die Bestellung mit NULL gefüllt.

In der zweiten Anweisung wird in einem Links-Outer-Join "Customers" mit "SalesOrders" verknüpft. Die Ergebnismenge umfasst alle Zeilen in der Tabelle "Customers". Für diejenigen Kunden, die keine Bestellung aufgegeben haben, werden die Felder für die Bestellung mit NULL gefüllt. Anschließend wird die WHERE-Bedingung angewendet, indem nur die Zeilen ausgewählt werden, in denen der Kunde seit dem 3. Januar 2000 einen Auftrag erteilt hat. Bei Kunden, die keine Aufträge erteilt haben, sind diese Werte NULL. Das Ergebnis eines Wertevergleichs mit NULL ist immer UNKNOWN. Diese Zeilen werden daher eliminiert, und die Anweisung wird zu einem Inner-Join reduziert.

Weitere Hinweise zu Suchbedingungen finden Sie unter Suchbedingungen.