Es gibt Fälle, in denen Sie eine Unterabfrage nicht vermeiden können, beispielsweise wenn Sie berechnete Spalten einbeziehen müssen, die Daten aus der aktuellen und der vorherigen Zeile verwenden. Betrachten Sie zum Beispiel diese Abfrage:
SELECT
(Current.Mileage - Last.Mileage)/Quantity as MPG
FROM
GasPurchases AS Current
LEFT OUTER JOIN GasPurchases AS Last
ON Last.Date =
(SELECT MAX(PurchaseDate)
FROM GasPurchases
WHERE PurchaseDate < Current.PurchaseDate)
Es wird einen Parsing-Fehler verursachen:
Ich habe diesen Thread gefunden auf MSDN, das eine Problemumgehung hat. Indem ich die Unterabfrage so geändert habe, dass sie einen Satz anstelle eines Skalarwerts zurückgibt, konnte ich die folgende Abfrage speichern und ausführen.
SELECT
(Current.Mileage - Last.Mileage)/Quantity as MPG
FROM
GasPurchases AS Current
LEFT OUTER JOIN GasPurchases AS Last
ON Last.Date IN
(SELECT MAX(PurchaseDate)
FROM GasPurchases
WHERE PurchaseDate < Current.PurchaseDate)