MySQL - 在查询时避免笛卡尔乘积



我有两个表 XY,我需要今天关闭 (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

相关内容

  • 没有找到相关文章

最新更新