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

polkgigr  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(259)

我正在尝试使用左联接从我的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
kmpatx3s

kmpatx3s1#

不清楚你为什么要使用 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);

注意:如果您将它们作为两个独立的操作运行,那么底层数据可能会在两个操作之间发生变化。
运行delete之后,可以使用 @@ROWCOUNT 以获取删除的记录数。

相关问题