Удаление нескольких строк одним запросом - PullRequest
6 голосов
/ 17 июля 2010

Это должен быть простой вопрос, но я пока не нашел четкого ответа.Кто-нибудь знает, как удалить несколько строк из одной таблицы в SQL Server 2005, используя один запрос?Я задавался вопросом, может ли это быть противоположностью вставки нескольких строк с использованием метода UNION ALL.Так будет ли это работать?:

DELETE FROM Table (Name, Location)
SELECT 'Name1', 'Location1'
UNION ALL
SELECT 'Name2', 'Location2'
UNION ALL
SELECT 'Name3', 'Location3'
etc...

EDIT : Я должен указать, что это таблица ссылок, из которой я пытаюсь удалить записи.Первичного ключа нет, и любые значения столбцов могут повторяться.Поэтому я должен быть уверен, что оба столбца содержат определенное значение для одной и той же записи, прежде чем я удаляю запись.

Ответы [ 3 ]

10 голосов
/ 17 июля 2010

Вы можете попробовать это:

DELETE FROM YourTable
WHERE (Name = 'Name1' AND Location = 'Location1')
OR (Name = 'Name2' AND Location = 'Location2')
OR (Name = 'Name3' AND Location = 'Location3')
2 голосов
/ 17 июля 2010

Использование CTE для меня работало - намного проще, чем использование OR и скобок:

WITH del AS (
  SELECT 'Name1' AS nam, 'Location1' AS loc
  UNION ALL
  SELECT 'Name2', 'Location2'
  UNION ALL
  SELECT 'Name3', 'Location3')
DELETE FROM CLASSES 
 WHERE EXISTS(SELECT NULL
               FROM del d 
              WHERE d.name = name
                AND d.loc = location)

Вы не можете определить псевдоним таблицы для таблицы в операторе удаления;Можно предположить, что любые ссылки на столбцы без псевдонима таблицы относятся к единственной таблице без таковой, но это также зависит от области действия.

1 голос
/ 17 июля 2010
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
...