2011-08-12 13 views
5

Mam więc tabele A i B w SQL Server oraz kolumny odpowiednio aib. Chcę wykonać następujące polecenie w komendzie pseudo-zapytań, ale nie mogę tego zrozumieć.Zapytanie o usunięcie SQL Server obejmujące dwie tabele

Chcę

DELETE FROM A 
WHERE a < 100 "and only if these selected (for deletion) values don't exist in column b in table B" 

Powodem jest to, że próbuję usunąć niektóre dane z tabeli A, ale to daje mi błąd mówiąc, że istnieje ograniczenie pomiędzy wartościami w A.a i B.b.

Czy dotyczy to aliasów? Jest to mylące ..

+0

Jaka wersja SQL Server używasz ? –

Odpowiedz

11

Spróbuj tego jeśli używasz SQL Server 2005 lub nowszy:

DELETE FROM TableA 
WHERE a < 100 AND 
a NOT IN (SELECT B FROM TableB) 

Dla SQL Server 2000 to powinno działać:

DELETE ta 
FROM TableA as ta 
LEFT JOIN TableB as tb 
ON ta.a = tb.b 
WHERE ta.a < 100 AND tb.b IS NULL 
+0

Nie byłem pewien na pytanie, ale biorąc pod uwagę, że nie było naruszenia ograniczeń, może TableB.b być obcym kluczem do tabeli A? Jeśli tak, czy wystąpiłaby jakakolwiek różnica w formie usunięcia innego niż zastąpienie "id" dla "a" w odpowiedniej klauzuli? – shelleybutterfly

+0

Hmmm, nie jestem pewien, czy rozumiem. Zgadzam się na twoje założenie dotyczące klucza zagranicznego. To usunięcie zasadniczo usunęłoby wszystkie rekordy z TableA, które nie byłyby przywoływane z TableB, co wydaje się być tym, czego potrzebuje. –

+0

@Abe Miessler, twoje pierwsze zapytanie zadziałało świetnie! Wygląda na to, że w MSSQL możesz wymusić kilka ograniczeń ...? Ostatnio uczę się MySQL, ale nie widzę żadnej z tych funkcji, które widzę w SQL Server Management Studio. – musicliftsme

Powiązane problemy