首页 > 解决方案 > 如何在sql server中找到左连接不匹配的行并在其之上执行一些操作?

问题描述

我正在尝试使用我的 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

标签: sqlsql-serverjoinstored-procedures

解决方案


目前尚不清楚您为什么要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获取删除的记录数。


推荐阅读