520 votes

T-SQL: Sélection de lignes à supprimer via les jointures

Scénario:

Disons que j'ai deux tables, TableA et TableB. TableB de la clé primaire est une seule colonne (BId), et une colonne de clé étrangère dans TableA.

Dans ma situation, je veux supprimer toutes les lignes dans TableA qui sont liées avec des lignes spécifiques dans la TableB: puis-je le faire à travers les jointures? Supprimer toutes les lignes qui sont extraites dans les jointures?

DELETE FROM TableA 
FROM
   TableA a
   INNER JOIN TableB b
      ON b.BId = a.BId
      AND [my filter condition]

Ou suis-je obligé de faire ceci:

DELETE FROM TableA
WHERE
   BId IN (SELECT BId FROM TableB WHERE [my filter condition])

La raison pour laquelle je demande est, il me semble que la première option serait beaucoup plus efficace lorsque vous traitez avec les plus grandes tables.

Merci!

770voto

TheTXI Points 24470
DELETE TableA 
FROM TableA a
INNER JOIN
TableB b on b.Bid = a.Bid
and [my filter condition]

devrait fonctionner

269voto

cmsjr Points 16766

Je voudrais utiliser cette syntaxe

Delete a 
from TableA a
Inner Join TableB b
on  a.BId = b.BId
WHERE [filter condition]

30voto

Diadistis Points 6892

Oui, vous pouvez. Exemple :

DELETE TableA 
FROM TableA AS a
INNER JOIN TableB AS b
ON a.BId = b.BId
WHERE [filter condition]

11voto

Tony Emrud Points 111

A essayé de le faire avec une base de données access et j'ai trouvé que j'nécessaires à l'utilisation de un.* à droite après la suppression.

DELETE a.*
FROM TableA AS a
INNER JOIN TableB AS b
ON a.BId = b.BId
WHERE [filter condition]

9voto

Michael Butler Points 1872

C'est presque la même dans MySQL, mais vous devez utiliser l' alias de la table à droite après le mot "SUPPRIMER":

DELETE a
FROM TableA AS a
INNER JOIN TableB AS b
ON a.BId = b.BId
WHERE [filter condition]

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