2011-08-12 35 views
5

所以我在SQL Server表A和B,和列。我想在僞查詢命令中執行以下操作,但似乎無法弄清楚。SQL服務器A和B分別刪除查詢涉及到兩個表

我想

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

的原因是,我試圖刪除表格中的一些數據,但它給我一個錯誤,指出存在A.A和B.b值之間的約束。

這是否涉及別名?這是令人困惑..

+0

您正在使用什麼版本的SQL Server ? –

回答

11

試試這個,如果你使用的是SQL Server 2005或更新:

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

對於SQL Server 2000這應該工作:

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

我對這個問題並不確定,但考慮到存在約束違規,TableB.b可能是TableA的外鍵查找?如果是這樣,刪除形式會有什麼不同,除了在適當的條款中用'id'代替'a'嗎? – shelleybutterfly

+0

嗯,我不知道我明白。我同意你的外鍵假設。這個刪除基本上會刪除TableA中沒有被TableB引用的任何記錄,這似乎是他/她需要的。 –

+0

@Abe Miessler,你的第一個查詢工作得很好!它看起來像在MSSQL中可以執行一系列限制..?我最近在學習MySQL,但似乎沒有任何我在SQL Server Management Studio中看到的功能。 – musicliftsme