92 votes

Supprimer toutes les lignes d'un tableau basé sur un autre tableau

Je ne me souviens plus de cette question !

Je veux supprimer toutes les lignes du tableau 1 dont les ID sont les mêmes que ceux du tableau 2.

Donc :

DELETE table1 t1
 WHERE t1.ID = t2.ID

Je sais que je peux faire un WHERE ID IN (SÉLECTIONNEZ ID dans la table2) mais je veux faire cette requête en utilisant une JOINTURE si possible.

106voto

HLGEM Points 54641
DELETE t1 
FROM Table1 t1
JOIN Table2 t2 ON t1.ID = t2.ID;

J'utilise toujours l'alias dans l'instruction delete car il empêche le

DELETE Table1 

causée lorsque vous ne parvenez pas à mettre en surbrillance l'ensemble de la requête avant de l'exécuter.

95voto

Stephen Mesa Points 1450
DELETE Table1
FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.ID

38voto

Cătălin Pitiș Points 10520

Il n'y a pas de solution dans ANSI SQL pour utiliser joins in deletes, AFAIK.

DELETE FROM Table1
WHERE Table1.id IN (SELECT Table2.id FROM Table2)

Modification ultérieure

Autre solution (parfois plus rapide) :

DELETE FROM Table1
WHERE EXISTS( SELECT 1 FROM Table2 Where Table1.id = Table2.id)

28voto

Vesanto Points 396

L'implémentation de PostgreSQL™ serait :

DELETE FROM t1
USING t2
WHERE t1.id = t2.id;

4voto

Yannick Motton Points 9806

Essayez ceci :

DELETE Table1
FROM Table1 t1, Table2 t2
WHERE t1.ID = t2.ID;

ou

DELETE Table1
FROM Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.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