首页 > 解决方案 > 在 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 的金额是相同的。

标签: sqloracle

解决方案


大概是这样的吧?

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));

推荐阅读