我正试图使用左联接从我的sql server studio中删除,我的问题是如何获得作为左联接的一部分而被删除的ID的列表,我还想比较两个表的总和之间的差异表A:
ID NAME LOC SUM
4 abc NY 500
5 seq CA 100
15 juv TX 120
表B:
ID NAME LOC SUM INFO
5 seq CA 90 x
18 jay AL 94 x
15 juv CL 190 x
我想得到作为左联接的一部分被删除的行数,我想看看总和的差异
DELETE MYDB
FROM MYDB.A
LEFT JOIN MYDB.B
ON A.ID=B.ID
WHERE A.ID=B.ID
不清楚为什么要将LEFT JOIN
用于JOIN
。WHERE
子句在其他方面是多余的,它正在将外部联接转换为内部联接。
我建议使用exists
:
delete from mydb.a
where exists (select 1 from mydb.b where b.id = a.id);
对于计数,您可以使用:
select count(*)
from mydb.a
where exists (select 1 from mydb.b where b.id = a.id);
请注意:如果您将这些操作作为两个单独的操作运行,那么底层数据可能会在操作之间发生变化。
运行删除后,您可以使用@@ROWCOUNT
来获取已删除的记录数。