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

Excluir linhas sql onde os IDs não têm correspondência de outra tabela

Usando LEFT JOIN/IS NULL:

DELETE b FROM BLOB b 
  LEFT JOIN FILES f ON f.id = b.fileid 
      WHERE f.id IS NULL

Usando NOT EXISTS:

DELETE FROM BLOB 
 WHERE NOT EXISTS(SELECT NULL
                    FROM FILES f
                   WHERE f.id = fileid)

Usando NOT IN:

DELETE FROM BLOB
 WHERE fileid NOT IN (SELECT f.id 
                        FROM FILES f)

Aviso


Sempre que possível, execute DELETEs dentro de uma transação (assumindo suporte - IE:Não no MyISAM) para que você possa usar o rollback para reverter as alterações em caso de problemas.