2013-08-29 35 views
0

我正在轉換訪問SQL,我被卡在這個刪除語句,因爲我不知道它確切地做了什麼。轉換訪問刪除語句到SQL服務器

DELETE TableA.cID, TableB.* 
FROM TableA RIGHT JOIN TableB ON TableA.cID = TableB.CID2 
WHERE (((TableA.cID) Is Null)); 

我猜測它是這樣的:

Delete 
from TableA right join TableB ON TableA.cID = TableB.CID2 
Where TableA.cID is null 

我真的不知道它是否應該在1臺或2 ..

+0

你想做什麼?你想從tableA或table2中刪除?請詳細解釋一下。 –

+0

我想弄清楚訪問查詢在做什麼 – AngelicCore

回答

0

刪除您想要的:

Delete TableB 
from TableA right join TableB ON TableA.cID = TableB.CID2 
Where TableA.cID is null 

就個人而言,我總是避免右連接,因爲可以通過切換表的順序來聲明同樣的事情。我會重寫這樣的陳述:

DELETE B 
FROM TableB AS B LEFT JOIN TableA AS A ON B.CID2 = A.cID 
WHERE A.cID IS NULL 

請參閱T-SQL: Selecting rows to delete via joins瞭解更多信息。


至於什麼該查詢究竟是幹什麼,這裏是一個簡要說明:

刪除TableB中所有行,在表A(TableA.cID IS NULL)不存在匹配的記錄爲條件TableB.CID2 = TableA.cID

+0

但是訪問查詢是不是同時從兩個表中刪除? – AngelicCore

+0

不,它不是從表2中刪除 –

+0

不,DELETE TableA.cID,TableB。*'的TableA.cID部分很可能是Access逐個查詢設計視圖的人工產物。原始程序員可能會雙擊TableA中的'cID'字段以將該字段添加到查詢設計網格(這是將查詢的第一行添加「TableA.cID」的部分),然後鍵入Is Null'在查詢設計網格的'TableA.cID'列的Criteria行中,以便查詢只會刪除TableB中具有* no *副本的**行。查詢第一行中的'TableB。*'告訴Access只能從TableB中刪除。 – mwolfe02