将 Access 删除语句转换为 SQL Server
Posted
技术标签:
【中文标题】将 Access 删除语句转换为 SQL Server【英文标题】:Convert Access delete statement to SQL Server 【发布时间】:2013-08-29 10:35:38 【问题描述】:我正在将 Access 转换为 SQL,但我被这个 Delete 语句卡住了,因为我不确定它到底做了什么。
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 个表中删除或..
【问题讨论】:
你想做什么?您想从 tableA 或 table2 中删除吗?请简单解释一下。 我试图弄清楚访问查询在做什么 【参考方案1】:你想要:
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 中对于条件
TableB.CID2 = TableA.cID
中 TableA (TableA.cID IS NULL
) 中不存在匹配记录的所有行
【讨论】:
但是访问查询不是一次从2个表中删除吗? 不,它不是从表 2 中删除 不,DELETE TableA.cID, TableB.*
的 TableA.cID
部分可能是 Access 的按设计查询视图的产物。最初的程序员可能从 TableA 中双击了 cID
字段以将该字段添加到查询设计网格(这是将 TableA.cID
添加到查询的第一行的部分),然后输入 Is Null
查询设计网格的 TableA.cID
列的 Criteria 行,以便 只有 TableB 中具有 no 在 TableA 中对应的行 将被查询删除。查询第一行中的TableB.*
告诉 Access 仅从 TableB 中删除。以上是关于将 Access 删除语句转换为 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章