将Access delete语句转换为SQL Server

时间:2013-08-29 10:35:39

标签: sql-server ms-access join sql-delete

我正在将Access转换为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或..

1 个答案:

答案 0 :(得分: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中TableA中没有匹配记录的所有行(TableA.cID IS NULL)条件TableB.CID2 = TableA.cID