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 в чате
источник