MySQL - 在查询时避免使用笛卡尔积?

时间:2017-03-15 10:53:21

标签: mysql sql join cartesian

我有两个表 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,但结果仍然相同。

你可以请你澄清一下 我们如何避免这种笛卡尔积以及它为什么这样计算? 和 是否有任何解决方案可以避免这样的建议?

谢谢!

1 个答案:

答案 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