2010-07-17 9 views
5

Đây phải là một câu hỏi đơn giản, nhưng tôi chưa tìm thấy câu trả lời rõ ràng. Có ai biết làm thế nào để xóa nhiều hàng từ một bảng duy nhất trong SQL Server 2005, bằng cách sử dụng một truy vấn duy nhất? Tôi tự hỏi nếu nó có thể chỉ là đối diện của chèn nhiều hàng, sử dụng phương pháp UNION ALL. Vì vậy, điều này sẽ làm việc? :Xóa nhiều hàng bằng một truy vấn

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

EDIT: Tôi phải chỉ ra rằng đây là một bảng liên kết mà tôi đang cố gắng để loại bỏ hồ sơ từ. Không có khóa chính và bất kỳ giá trị nào của cột có thể lặp lại. Vì vậy, tôi cần phải chắc chắn rằng cả hai cột chứa một giá trị nhất định cho cùng một bản ghi trước khi tôi xóa bản ghi.

Trả lời

9

Bạn có thể thử này:

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

Phạm vi trong đó khoản có thể phù hợp, nếu bạn muốn xóa một bộ sưu tập trước một ngày nhất định. –

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 
+0

'FROM ' trong liên kết đó ngụ ý JOIN được cho phép. Tôi chắc chắn rằng họ là như tôi đã sử dụng chúng nhiều thời gian. :) –

+1

Chỉ cần thử so với MSSQL 2005 và nó hoạt động tốt OMG Ponies. –

2

Sử dụng một CTE làm việc cho tôi - dễ dàng hơn nhiều so với sử dụng ORS và dấu ngoặc:

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) 

Bạn không thể định nghĩa một bí danh bảng cho bảng trong một tuyên bố xóa; bất kỳ tham chiếu cột nào mà không có bí danh bảng có thể được giả định liên quan đến bảng duy nhất không có một, nhưng nó cũng phụ thuộc vào phạm vi.