这个访问查询实际上删除了什么?

时间:2013-09-26 11:51:04

标签: sql ms-access sql-delete

DELETE A.*, B.cID, A.capacity
FROM A LEFT JOIN B ON A.cID = B.cID
WHERE (((B.cID) Is Null) AND ((A.capacity)="r"));

可悲的是,这是我正在研究的项目,我正在尝试将其转换为SQL以在sql server上运行。

唯一的问题是,我不知道删除Table.Column做什么..它在sql server中不起作用 删除语句中包含B.cID和A.Capacity的内容是什么?

1 个答案:

答案 0 :(得分:1)

认为会删除A中的行

  • B中没有匹配的行,
  • 的容量等于“r”。

如果我是对的,我认为这个陈述是等同的。

delete from a 
where a.cid not in (select cid from B)
  and a.capacity = 'r';

虽然左边连接的语句最初可读性较差,但它通常表现得更好。对于SQL Server,您也可以测试此查询。

delete from a
left join b on a.cid = b.cid
where b.cid is null 
  and a.capacity = 'r';

确保两个查询具有相同的结果,然后查看每个版本的执行计划,以查看哪个更好,以及为什么。

DELETE语句删除行。它们不会从列中删除值,同时保留行不完整。 (我很确定这会让你对原始语法感到困惑。)