Microsoft saat ini mengizinkan sintaks ini.
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
);
Perhatikan bahwa tidak ada GROUP BYdalam EXISTSklausa, apakah itu ANSI SQL yang valid. Atau itu hanya mengekspos detail implementasi.
Sebagai referensi, sintaksis yang sama ini tidak diizinkan di PostgreSQL.
GALAT: kolom "tx" harus muncul dalam klausa GROUP BY atau digunakan dalam fungsi agregat
Tapi sintaks ini diizinkan ..
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
);
Dan sintaks ini diizinkan.
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
);
Pertanyaan muncul dari percakapan dengan @ErikE dalam obrolan