Microsoft erlaubt diese Syntax derzeit.
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
);
Beachten Sie, dass GROUP BY
die EXISTS
Klausel kein gültiges ANSI-SQL enthält. Oder wird lediglich ein Implementierungsdetail angezeigt?
Als Referenz ist dieselbe Syntax in PostgreSQL nicht zulässig.
FEHLER: Die Spalte "tx" muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden
Diese Syntax ist jedoch zulässig.
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
);
Und diese Syntax ist erlaubt.
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
);
Die Frage ergibt sich aus einem Gespräch mit @ErikE im Chat
quelle