ऐसे मामले हैं जब आप एक सबक्वेरी से बच नहीं सकते हैं, उदाहरण के लिए यदि आपको परिकलित कॉलम शामिल करने हैं जो वर्तमान और पिछली पंक्ति के डेटा का उपयोग करते हैं। उदाहरण के लिए इस प्रश्न पर विचार करें:
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)
यह एक पार्सिंग त्रुटि उत्पन्न करेगा:
मुझे यह धागा मिला एमएसडीएन पर जिसमें वर्कअराउंड है। सबक्वेरी को बदलकर ताकि यह एक अदिश मान के बजाय एक सेट लौटाए, मैं निम्नलिखित क्वेरी को सहेजने और चलाने में सक्षम था।
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)