U kunt NOT EXISTS
. gebruiken
SELECT a.id, a.name
FROM A
WHERE NOT EXISTS
(
SELECT 1 FROM B
WHERE b.A = a.id AND b.cond = 'X'
)
Ik vergeet echter altijd dat MySql de enige (?) rdbms is die problemen heeft met het optimaliseren van een EXISTS
/NOT EXISTS
. Het is dus iets efficiënter om een LEFT JOIN
. te gebruiken benadering.
http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/
In MS SQL-Server is het beter om de NOT EXISTS
. te gebruiken .
http://sqlperformance.com/2012/12 /t-sql-queries/left-anti-semi-join