Microsoft autorise actuellement cette syntaxe.
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
);
Notez qu'il n'y a pas GROUP BY
dans la EXISTS
clause, c'est que SQL ANSI valide. Ou s'agit-il simplement d'exposer un détail d'implémentation.
Pour référence, cette même syntaxe n'est pas autorisée dans PostgreSQL.
ERREUR: la colonne "tx" doit apparaître dans la clause GROUP BY ou être utilisée dans une fonction d'agrégation
Mais cette syntaxe est autorisée ..
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
);
Et cette syntaxe est autorisée.
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 question découle d' une conversation avec @ErikE dans le chat
la source