2013-01-18 48 views
7

Có vẻ như có một số câu hỏi như thế này, nhưng không có chính xác như vậy, do đó, ở đây:Xóa hàng trong một bảng dựa trên các giá trị hàng trong bảng này và một bảng khác

Tôi cần tìm cách xóa hàng trong một bảng trong đó có một hàng trong bảng khác có hai trường của nó bằng hai trường từ bảng gốc. (Trong ví dụ sau, điều này sẽ đọc: Tôi cần tìm cách xóa hàng trong @All có @ All.Stall = @ Grouped.Stall và @ All.Fruit = @ Grouped.Fruit)

Ví dụ:

@All: bảng đã hàng xóa:

Stall  Fruit 
------------------- 
John  Apples 
John  Pears 
John  Pineapple 
Mary  Apples 
Mary  Apples 
Mary  Pears 
Mary  Pineapple 

@Grouped: bảng để có được hàng để xóa từ:

Stall  Fruit 
------------------- 
Mary  Apples 

bảng kết quả sẽ giống như thế này:

Stall  Fruit 
------------------- 
John  Apples 
John  Pears 
John  Pineapple 
Mary  Pears 
Mary  Pineapple 

Lưu ý rằng hai hàng có chứa: Mary | Táo đã biến mất.

Đối với cuộc sống của tôi, tôi không thể tìm ra cách để làm điều này, và chỉ có thể làm cho nó để loại bỏ tất cả ba hàng có chứa Táo và không để lại một John | Táo.

Dưới đây là các truy vấn để tạo ra hai bảng tạm thời, nếu có ai có thể giúp:

@All - Bảng để có hàng xóa

@Grouped - Bảng với các lĩnh vực để nhìn lên để xóa từ @All

DECLARE @All TABLE(
    Stall varchar(10), 
    Fruit varchar(10), 
    StallFruitID int 
) 

DECLARE @Grouped TABLE(
    Stall varchar(10), 
    Fruit varchar(10) 
) 

INSERT INTO @All (Stall,Fruit,StallFruitID) VALUES('John','Apples',1) 
INSERT INTO @All (Stall,Fruit,StallFruitID) VALUES('John','Pears',1) 
INSERT INTO @All (Stall,Fruit,StallFruitID) VALUES('John','Pineapple',1) 
INSERT INTO @All (Stall,Fruit,StallFruitID) VALUES('Mary','Apples',1) 
INSERT INTO @All (Stall,Fruit,StallFruitID) VALUES('Mary','Apples',2) 
INSERT INTO @All (Stall,Fruit,StallFruitID) VALUES('Mary','Pears',1) 
INSERT INTO @All (Stall,Fruit,StallFruitID) VALUES('Mary','Pineapple',1) 

INSERT INTO @Grouped (Stall,Fruit) VALUES('Mary','Apples') 

Trả lời

12
DELETE a 
FROM table1 a 
     INNER JOIN table2 b 
      ON a.Stall = b.Stall AND 
       a.Fruit = b.Fruit 
+0

Vâng, tôi không cảm thấy ngu ngốc XD Làm việc như một nét duyên dáng, THANK YOU! – Applez00800

+0

@ Applez00800 bạn được chào đón ': D' –

0

Hãy thử điều này

DELETE FROM @All WHERE Stall="Mary" AND Fruit="apples"; 
+0

Thao tác này sẽ hoạt động đối với trường hợp này của bảng, nhưng không thích nghi với bảng đang phát triển. Xem câu trả lời của @JW cho một giải pháp thích ứng :) – Applez00800

Các vấn đề liên quan