Eine Unterabfrage, die einem Vergleichsoperator (=, >, <, >=, <=, !=, <>, !>, !<) folgt, wird ein Vergleich genannt. Der Optimierer konvertiert diese Unterabfragen in Joins, sofern die Unterabfrage folgende Bedingungen erfüllt:
Sie gibt genau einen Wert für jede Zeile in der Hauptabfrage zurück.
Sie enthält keine GROUP BY-Klausel.
Die Unterabfrage enthält kein Schlüsselwort DISTINCT.
Die Unterabfrage ist keine UNION-Abfrage.
Die Unterabfrage ist keine Aggregatabfrage.
Nehmen Sie folgende Anforderung an: "Wann wurden die Produkte von Suresh bestellt und von welchem Verkäufer?"
SELECT OrderDate, SalesRepresentative FROM SalesOrders WHERE CustomerID = ( SELECT ID FROM Customers WHERE GivenName = 'Suresh' ); |
Diese Abfrage entspricht dem Kriterium und kann daher in eine Abfrage umgewandelt werden, die einen Join benutzt:
SELECT OrderDate, SalesRepresentative FROM SalesOrders, Customers WHERE CustomerID=Customers.ID AND ( Surname = 'Clarke' OR GivenName = 'Suresh' ); |
Die Anforderung "Finde die Produkte, deren Lagermengen weniger als das Doppelte der durchschnittlich bestellten Menge betragen" kann nicht in einen Join umgewandelt werden, da die Unterabfrage eine Aggregatfunktion enthält, nämlich AVG:
SELECT Name, Description FROM Products WHERE Quantity < 2 * ( SELECT AVG( Quantity ) FROM SalesOrderItems ); |
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 |