Để bắt đầu, nếu chúng tôi đưa ra lỗi đầy đủ, nó sẽ có nội dung là " Mỗi biểu thức GROUP BY phải chứa ít nhất một cột không phải là tham chiếu bên ngoài. "
Để hiểu lỗi, chúng tôi cần làm rõ ý nghĩa của 'tham chiếu bên ngoài'
(Lưu ý:trong trường hợp này, nó không liên quan gì đến các phép nối bên trong hoặc bên ngoài)
Bên trong và bên ngoài tham chiếu đến truy vấn chính và truy vấn phụ. Trong trường hợp này là EXISTS
là truy vấn con và nó là một tương quan truy vấn con vì nó có tham chiếu bên ngoài là #header.header
, tham chiếu đến bảng bên ngoài #header
, trong khi bất kỳ tham chiếu nào đến #detail
sẽ được coi là tài liệu tham khảo bên trong.
Về bản chất, vì CASE
sử dụng truy vấn con tương quan tham chiếu đến truy vấn bên ngoài, sau đó điều này kích hoạt trạng thái lỗi, vì thông báo lỗi này xuất hiện khi bạn cố gắng chỉ sử dụng các biểu thức trong mệnh đề GROUP BY được hiểu là tham chiếu bên ngoài.
Truy vấn phụ có thể được sử dụng trong GROUP BY, nhưng không được sử dụng trong các truy vấn con tương quan.
Thật khó hiểu, cùng một lỗi có thể được tạo ra bởi một truy vấn đơn giản hơn, không được truy vấn lại, chẳng hạn như
select
case when header=1 then 1
else 0
end headeris1,
'constant'
from #header
group by case when header=1 then 1 else 0 end , 'constant'
hoặc thậm chí thay thế hằng số bằng @variable
Trong như bùn?
Kev