Microsoft hiện cho phép cú pháp này.
SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
SELECT *
FROM ( VALUES (1),(1) )
AS t(x)
WHERE g.x = t.x
HAVING count(*) > 1
);
Lưu ý rằng không có GROUP BY
trong EXISTS
mệnh đề, đó là ANSI SQL hợp lệ. Hoặc nó chỉ đơn thuần là phơi bày một chi tiết thực hiện.
Để tham khảo, cú pháp tương tự này không được phép trong PostgreSQL.
LRI: cột "tx" phải xuất hiện trong mệnh đề GROUP BY hoặc được sử dụng trong hàm tổng hợp
Nhưng cú pháp này được cho phép ..
SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
SELECT 1 -- This changed from the first query
FROM ( VALUES (1),(1) )
AS t(x)
WHERE g.x = t.x
HAVING count(*) > 1
);
Và cú pháp này được cho phép.
SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
SELECT *
FROM ( VALUES (1),(1) )
AS t(x)
WHERE g.x = t.x
GROUP BY t.x -- This changed from the first query
HAVING count(*) > 1
);
Câu hỏi phát sinh từ một cuộc trò chuyện với @ErikE trong trò chuyện