Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Excluir registros se a tabela certa corresponder


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

No entanto, eu sempre esqueço que o MySql é o único(?) rdbms que tem problemas para otimizar um EXISTS /NOT EXISTS . Portanto, é um pouco mais eficiente usar um LEFT JOIN abordagem.

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

No MS SQL-Server é melhor usar o NOT EXISTS .

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