Microsoft actualmente permite esta sintaxis.
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
);
Tenga en cuenta que no hay GROUP BY
en la EXISTS
cláusula, es ese ANSI SQL válido. ¿O es simplemente exponer un detalle de implementación?
Como referencia, esta misma sintaxis no está permitida en PostgreSQL.
ERROR: la columna "tx" debe aparecer en la cláusula GROUP BY o usarse en una función agregada
Pero esta sintaxis está permitida.
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
);
Y esta sintaxis está permitida.
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
);
La pregunta surge de una conversación con @ErikE en el chat