6

这应该是一个直截了当的问题,但我还没有找到明确的答案。有谁知道如何使用单个查询从 SQL Server 2005 中的单个表中删除多行?我想知道它是否可能与使用该UNION ALL方法插入多行相反。那么这行得通吗?:

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

编辑:我应该指出,这是我试图从中删除记录的链接表。没有主键,任何列的值都可能重复。因此,在删除记录之前,我需要确保两列都包含同一记录的某个值。

4

3 回答 3

10

你可以试试这个:

DELETE FROM YourTable
WHERE (Name = 'Name1' AND Location = 'Location1')
OR (Name = 'Name2' AND Location = 'Location2')
OR (Name = 'Name3' AND Location = 'Location3')
于 2010-07-17T18:17:08.587 回答
2

使用 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)

您不能在删除语句中为表定义表别名;可以假定没有表别名的任何列引用都与唯一没有表别名的表相关,但这也取决于范围。

于 2010-07-17T18:28:35.113 回答
1
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
于 2010-07-17T18:20:12.260 回答