220 votes

Supprimer sql lignes où Id n'ont pas de correspondance dans l'autre table

svp, puis-je avoir de l'aide sur ce. Je suis en train de supprimer les entrées orphelines dans un tableau.

J'ai 2 tables comme ceci:

tableau files:

| id | ....
------------
| 1  | ....
| 2  | ....
| 7  | ....
| 9  | ....

tableau blob:

| fileid | ....
------------
| 1  | ....
| 2  | ....
| 3  | ....
| 4  | ....
| 4  | ....
| 4  | ....
| 9  | ....

Les tables fileid et l'id de colonnes peut être utilisé pour joindre les tables.

Je veux supprimer toutes les lignes dans la table blob où fileid ne peut être trouvé dans la table files.

Donc, en utilisant l'exemple ci-dessus, qui permettrait de supprimer des lignes: 3 & 4(s) dans l' blob table.

Merci pour toute aide.

423voto

OMG Ponies Points 144785

En utilisant une JOINTURE GAUCHE/EST NULLE:

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

L'aide n'EXISTE PAS:

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

À l'aide de PAS DANS:

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

Avertissement

Chaque fois que possible, procéder à des Suppressions dans une transaction (en supposant pris en charge - c'est à dire: Pas sur MyISAM) de sorte que vous pouvez utiliser rollback pour annuler les modifications apportées en cas de problèmes.

33voto

Martin Smith Points 174101
DELETE FROM blob 
WHERE fileid NOT IN 
       (SELECT id 
        FROM files 
        WHERE id is NOT NULL/*This line is unlikely to be needed 
                               but using NOT IN...*/
      )

22voto

George Points 1374
DELETE FROM blob
WHERE NOT EXISTS (
    SELECT *
    FROM files
    WHERE id=blob.id
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X