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 に答える