Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datensätze ausschließen, wenn die richtige Tabelle übereinstimmt

Sie können NOT EXISTS verwenden

SELECT a.id, a.name
FROM A
WHERE NOT EXISTS
(
    SELECT 1 FROM B
    WHERE b.A = a.id AND b.cond = 'X'
)

Allerdings vergesse ich immer, dass MySql das einzige (?) RDBMS ist, das Probleme hat, ein EXISTS zu optimieren /NOT EXISTS . Daher ist es etwas effizienter, einen LEFT JOIN zu verwenden Ansatz.

http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/

In MS SQL-Server ist es besser, den NOT EXISTS zu verwenden .

http://sqlperformance.com/2012/12 /t-sql-queries/left-anti-semi-join