我有两个表 X 和 Y ,我需要今天已关闭的行数(fd_sts_cd ='C')(fulfill_date = CURRENT_DATE)。< / p>
数据库有数据
select *
from prdsbtmb_mbr_add_info
where fd_sts_cd = 'C' and mbr_id_no='9292138102'-> **12 rows**.
select *
from prdsbtfa_ffl_attempt
where nxt_ffl_dt = CURRENT_DATE and mbr_id_no='9292138102' -> **41 rows**
虽然加入他们的结果有所不同
SELECT COUNT(*)
FROM X a, Y b
WHERE b.fulfill_date = CURRENT_DATE AND
a.id = b.id AND
a.fd_sts_cd = 'C' -> RESULT COUNT::**492**(12*41)
我已经尝试了所有加入INNER,LEFF,OUTER JOININGS,但结果仍然相同。
你可以请你澄清一下 我们如何避免这种笛卡尔积以及它为什么这样计算? 和 是否有任何解决方案可以避免这样的建议?谢谢!
答案 0 :(得分:0)
使用join
你无法真正做到这一点。 join
生成笛卡尔积。
一个简单的方法就是在select
子句中使用子查询:
select ( (select count(*)
from prdsbtmb_mbr_add_info
where fd_sts_cd = 'C' and mbr_id_no = '9292138102'
) +
(select count(*)
from prdsbtfa_ffl_attempt
where nxt_ffl_dt = CURRENT_DATE and mbr_id_no = '9292138102'
)
) as total