Mysql
 sql >> Base de données >  >> RDS >> Mysql

Supprimer les lignes sql où les ID ne correspondent pas à une autre table

Utiliser LEFT JOIN/IS NULL :

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

Utiliser NON EXISTE :

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

Utiliser NOT IN :

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

Avertissement

Dans la mesure du possible, effectuez des DELETE dans une transaction (en supposant qu'elle soit prise en charge - IE :pas sur MyISAM) afin de pouvoir utiliser la restauration pour annuler les modifications en cas de problème.