För att hitta alla användare med minst ett inlägg med betyg över 10, använd:
SELECT u.*
FROM USERS u
WHERE EXISTS(SELECT NULL
FROM POSTS p
WHERE p.user_id = u.id
AND p.rating > 10)
EXISTS bryr sig inte om SELECT-satsen i den - du kan ersätta NULL med 1/0, vilket borde resultera i ett matematiskt fel för att dividera med noll... Men det gör det inte, eftersom EXISTS bara handlar om filtreringen i WHERE-klausulen.
Korrelationen (WHERE p.user_id =u.id) är anledningen till att detta kallas en korrelerad underfråga, och kommer bara att returnera rader från tabellen ANVÄNDARE där id-värdena matchar, förutom betygsjämförelsen.
EXISTS är också snabbare, beroende på situationen, eftersom det returnerar sant så fort kriterierna är uppfyllda - dubbletter spelar ingen roll.