На даний момент 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" повинен з'являтися в пункті GROUP BY або використовуватись у сукупній функції
Але цей синтаксис дозволений ..
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 у чаті