sql - 在 SQL 查询中使用 Not in
问题描述
我有两张表 billcrown 和 bank_details。在 billcrown 中,每个 PJNO 都有一个唯一的行:
PJNO GRIRNO AMT
---- ------ ----
PJ1 GRIR1 1000
PJ2 GRIR2 150
表bankdetails有
PJNO GRIRNO AMT
---- ------ ---
PJ1 GRIR1 100
PJ2 GRIR2 150
PJ1 GRIR1 200
我想显示表 billcrown 的所有 PJNO,其中 bankdetails 中此 PJNO 的 AMT 总和不等于 billcrown 中此 PJNO 的 AMT
这里billcrown的金额中的PJ1是1000,但是PJ1的bankdetails中的金额总和是300。所以应该显示出来。但是在 PJ2 的情况下, billcrown 和 bankdetails 的金额是相同的。
解决方案
大概是这样的吧?
select c.pjno
from billcrowm c join bankdetails d on d.pjno = c.pjno
group by c.pjno
having sum(c.amt) <> sum(d.amt);
[编辑,在新信息被披露后]
与 NVL 的外部连接可能会完成这项工作。
select c.pjno
from billcrowm c left join bankdetails d on c.pjno = d.pjno
group by c.pjno
having sum(c.amt) <> nvl(sum(d.amt), 0);
[编辑#2,阅读沙拉德的评论后]
with csum as
(select pjno, grirno, sum(amt) amt
from billcrowm
group by pjno, grirno
),
dsum as
(select pjno, grirno, sum(amt) amt
from bankdetails
group by pjno, grirno
)
select c.pjno
from csum c left join dsum d on c.pjno = d.pjno
group by c.pjno
having sum(c.amt) <> sum(nvl(d.amt, 0));
推荐阅读
- google-cloud-platform - 我如何知道哪个服务帐户绑定到哪个服务器?
- python-2.7 - “ascii”编解码器无法编码字符 x
- ddev - 如何在 ddev exec 中使用 'cd' 或 '&&' 或 '>' 重定向等 bash 结构?
- spring-boot - 如何在 Spring 集成中重试对 Webflux.outboundgateway 的失败调用
- angularjs - 无法从 Ionic PWA 上的 firebase-sw 获取通知有效负载
- r - 如何将时间序列填充转换为 R 中的函数并在列表中运行
- java - 在等待()之前没有被线程锁定的对象?
- c# - 如何找到已读入 DataTables 的两个结构相同的查询之间的差异?返回更改的值
- javascript - this.handleChange.bind(this) 和渲染使用
- algorithm - 如何跟踪迭代(非递归)函数的嵌套信息