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 BY
dalam EXISTS
klausa, 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