6
votes

Supprimer plusieurs rangées avec une seule requête

Cela devrait être une question directe, mais je n'ai pas encore trouvé de réponse claire. Est-ce que quelqu'un sait comment supprimer plusieurs lignes d'une seule table dans SQL Server 2005, en utilisant une seule requête? Je me demandais si cela pourrait simplement être le contraire de l'insertion de plusieurs lignes, à l'aide de la méthode Union . Alors cela fonctionnerait-il? : XXX

EDIT : Je dois souligner que c'est une table de liens que j'essaie de supprimer des enregistrements. Il n'y a pas de clé primaire et l'une des valeurs des colonnes peut répéter. Je dois donc être sûr que les deux colonnes contiennent une certaine valeur pour le même enregistrement avant de supprimer l'enregistrement.


0 commentaires

3 Réponses :


10
votes

Vous pouvez essayer ceci:

DELETE FROM YourTable
WHERE (Name = 'Name1' AND Location = 'Location1')
OR (Name = 'Name2' AND Location = 'Location2')
OR (Name = 'Name3' AND Location = 'Location3')


1 commentaires

Une gamme où la clause pourrait être appropriée, si vous dites voulu supprimer une collection avant une certaine date.



1
votes
DELETE FROM T
FROM YourTable T
INNER JOIN (
SELECT 'Name1' AS Name, 'Location1' AS Location
UNION ALL
SELECT 'Name2', 'Location2'
UNION ALL
SELECT 'Name3', 'Location3'
) T2
ON T2.Name = T.Name
AND T2.Location = T.Location

1 commentaires

à partir de dans ce lien implique des jointures sont autorisées. Je suis sûr qu'ils sont comme je les ai utilisés plusieurs fois. :)



2
votes

Utiliser un CTE a fonctionné pour moi - beaucoup plus facile que d'utiliser des oursiers et des crochets: xxx

Vous ne pouvez pas définir un alias de table pour la table dans une instruction DELETE; Toutes les références de colonnes sans alias de table ont pu être supposées se rapporter à la seule table sans un, mais cela dépend également de la portée.


0 commentaires