Có những trường hợp bạn không thể tránh một truy vấn con, chẳng hạn như nếu bạn phải bao gồm các cột được tính toán sử dụng dữ liệu từ hàng hiện tại và hàng trước đó. Hãy xem xét truy vấn này, chẳng hạn:
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)
Nó sẽ gây ra lỗi phân tích cú pháp:
Tôi đã tìm thấy chuỗi này trên MSDN có cách giải quyết khác. Bằng cách thay đổi truy vấn con để nó trả về một tập hợp thay vì một giá trị vô hướng, tôi đã có thể lưu và chạy truy vấn sau.
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)