1
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 中不起作用 在 Delete 语句中包含 B.cID 和 A.Capacity 有什么作用?

4

1 回答 1

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 语句删除行。它们不会从列中删除值,同时保持行不变。(我很确定这就是让你对原始语法感到困惑的地方。)

于 2013-09-26T13:28:32.107 回答