2013-01-18 41 views
7

似乎有是這樣幾個問題,但沒有完全一樣的,所以這裏有雲:刪除行根據在此行的值和另一個表

我需要找到一種方法來刪除在另一個表中有一行中有兩行的字段等於原始表中的兩個字段。 (在以下示例中,這將顯示爲: 我需要找到一種方法來刪除@All中具有@ All.Stall = @ Grouped.Stall和@ All.Fruit = @ Grouped.Fruit的行中的一行)

例如:

@All:已刪除的行表:

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

@Grouped:表獲取行從刪除:

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

得到的表應該是這樣的:

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

請注意,這兩行包含:Mary |蘋果不見了。

對於我的生活,我無法弄清楚如何做到這一點,並且只能讓它移除包含蘋果的所有三行並且不會留下一行John |蘋果

以下是創建兩個臨時表查詢,如果有人能夠幫助:

@All - 表有刪除的行

@Grouped - 表字段查找刪除從@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') 

回答

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

好了,不要我覺得自己很蠢XD工作就像一個魅力,謝謝! – Applez00800

+0

@ Applez00800不客氣':D' –

0

試試這個

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

這將適用於表的這一個實例,但不適用於增長表。請參閱@JW的適應性解決方案:) – Applez00800

相關問題