Microsoft อนุญาตให้ใช้ไวยากรณ์นี้ในขณะนี้
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
);
ขอให้สังเกตว่าไม่มีGROUP BY
ในEXISTS
ข้อเป็น ANSI SQL ที่ถูกต้อง หรือเป็นเพียงการเปิดเผยรายละเอียดการปฏิบัติ
สำหรับการอ้างอิงไวยากรณ์เดียวกันนี้ไม่ได้รับอนุญาตใน PostgreSQL
ข้อผิดพลาด: คอลัมน์ "tx" จะต้องปรากฏในกลุ่มตามข้อหรือจะใช้ในฟังก์ชั่นรวม
แต่ไวยากรณ์นี้ได้รับอนุญาต ..
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
);
และไวยากรณ์นี้ได้รับอนุญาต
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
);
คำถามเกิดขึ้นจากการสนทนากับ @ErikE ในการแชท