2013-01-18 11 views
7

Wydaje się, że kilka takich pytań, ale nie dokładnie takie same, więc tu idzie:usuwanie wierszy w jednej tabeli na podstawie wartości rzędu w tej i innej tabeli

muszę znaleźć sposób, aby usunąć wiersz w jednej tabeli, gdzie znajduje się wiersz w innej tabeli, której dwa pola odpowiadają dwóm polom z oryginalnej tabeli. (W poniższym przykładzie będzie to oznaczać: Potrzebuję znaleźć sposób na usunięcie wiersza w @All, który ma @ All.Stall = @ Grouped.Stall i @ All.Fruit = @ Grouped.Fruit)

na przykład:

@All: Stół się wiersze usunięte:

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

@Grouped: Tabela aby usunąć z wierszy:

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

Powstały tabeli powinna wyglądać następująco:

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

Zauważ, że te dwa wiersze, które zawierają: Mary | Jabłka zniknęły.

Dla mojego życia nie mogę wymyślić, jak to zrobić, i mogę go usunąć tylko po to, aby usunąć wszystkie trzy rzędy zawierające jabłka i nie pozostawiać tego, co się nazywa John | Jabłka.

Oto pytania, aby utworzyć dwie tabele tymczasowe, jeśli ktoś jest w stanie pomóc:

@All - Tabela mieć wiersze usunięte

@Grouped - tabela z polami do look-up, aby usunąć z @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') 

Odpowiedz

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

Cóż, nie czuję się głupia XD Pracował jak czar, dziękuję! – Applez00800

+0

@ Applez00800 serdecznie zapraszamy ': D' –

0

Spróbuj

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

To będzie działać dla tej jednej instancji tabeli, ale nie można jej dostosować do rosnącej tabeli. Zobacz odpowiedź @JW na adaptacyjne rozwiązanie :) – Applez00800

Powiązane problemy