Microsoft attualmente consente questa sintassi.
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
);
Si noti che GROUP BY
nella EXISTS
clausola non è presente , è valido ANSI SQL valido. O sta semplicemente esponendo un dettaglio di implementazione.
Per riferimento, questa stessa sintassi non è consentita in PostgreSQL.
ERRORE: la colonna "tx" deve apparire nella clausola GROUP BY o essere utilizzata in una funzione aggregata
Ma questa sintassi è consentita ..
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
);
E questa sintassi è consentita.
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 domanda nasce da una conversazione con @ErikE in chat