sql - 如何在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
解决方案
目前尚不清楚您为什么要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
获取删除的记录数。
推荐阅读
- c# - 带输入参数的单元测试
- javascript - 想在 foreach 循环中使用加减号图标在折叠时使用 javascript
- sql - 视图(或内部查询)返回错误,因为记录不是其结果的一部分 (??)
- kubernetes - 如何在 Kubernetes pod 之间共享代码库?
- python - 即使终端关闭,如何使python脚本继续运行?
- spartacus-storefront - 覆盖 Spartacus refreshToken 方法
- java - @Version 注释无法正常工作
- ruby - ruby 中的谷歌云 api 在上传单个文件时执行失败
- css - Column Flex,子 iframe 100% 高度,显示父滚动
- javascript - 如何从 Electron 应用程序获取活动 URL?