如何在sqlserver中找到左联接不匹配的行并在其上执行一些操作



我正试图使用左联接从我的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用于JOINWHERE子句在其他方面是多余的,它正在将外部联接转换为内部联接。

我建议使用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来获取已删除的记录数。

最新更新