我有两个表 X 和 Y,我需要今天关闭 (fd_sts_cd = 'C'( 的行总数 (fulfill_date = CURRENT_DATE(。
数据库有数据
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)
我已经尝试了所有连接内,莱夫,外连接,但结果仍然相同。
你能澄清一下我
吗我们如何避免这种笛卡尔乘积,为什么它会这样计算?和有什么解决方案可以避免我建议吗?
谢谢!!
你不能真正使用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