I know, i know
地球另一端有你陪我
起因是在写模型时发现一个模型的结果数据量异常大
发现是我之前调整了关联条件导致的
数据异常的模型
SELECT a.*
FROM A表 a
LEFT JOIN B表 b
ON a.农户编号 = b.农户编号
AND a.申请支付时间 = b.申请支付时间
AND a.补贴项目名称 = b.补贴项目名称
AND a.发放批次 = b.发放批次
AND a.锁定状态 = '临时锁定'
AND b.锁定状态 = '完全锁定'
AND a.行政区划编码 = '610126'
AND b.实发金额 IS NULL
原版逻辑
SELECT a.*
FROM A表 a
LEFT JOIN B表 b
ON (
a.农户编号 = b.农户编号
AND a.申请支付时间 = b.申请支付时间
AND a.补贴项目名称 = b.补贴项目名称
AND a.发放批次 = b.发放批次
AND b.锁定状态 = '完全锁定')
WHERE
a.锁定状态 = '临时锁定'
AND a.行政区划编码 = '610126'
AND b.实发金额 IS NULL
以前有想过关联条件和筛选条件会不会影响最终结果
现在看来是会影响的,下面这句话是关键
在 LEFT JOIN 里,只要 a 表中的行满足 ON 子句的部分条件,
即使 b 表中没有完全匹配的行,a 表的行也会被保留在结果集中,
b 表对应的列会填充为 NULL。
相对的,在正常的内部关联中,对结果不会有太大结果
但是筛选条件放在 ON 中,会早一步筛选,提高运行结果