For at finde alle brugere med mindst ét indlæg med en vurdering over 10, skal du bruge:
SELECT u.*
FROM USERS u
WHERE EXISTS(SELECT NULL
FROM POSTS p
WHERE p.user_id = u.id
AND p.rating > 10)
EXISTS er ligeglad med SELECT-sætningen i den - du kan erstatte NULL med 1/0, hvilket skulle resultere i en matematisk fejl for at dividere med nul... Men det vil den ikke, fordi EXISTS kun handler om filtreringen i WHERE-klausulen.
Korrelationen (WHERE p.user_id =u.id) er grunden til, at dette kaldes en korreleret underforespørgsel og vil kun returnere rækker fra BRUGER-tabellen, hvor id-værdierne matcher, ud over vurderingssammenligningen.
EXISTS er også hurtigere, afhængigt af situationen, fordi det returnerer sandt, så snart kriterierne er opfyldt - dubletter betyder ikke noget.