多表关联查询:保留全量2500万ID关联4张业务表结果缺失问题
多表关联保留全量主ID的SQL实现方案
根因:左关联时如果把副表的过滤条件写在WHERE子句中,会过滤掉主表中关联副表失败的记录,最终导致主表ID缺失
解决方法:将所有副表的过滤条件调整到对应JOIN语句的ON子句中即可解决
实现逻辑说明
- 必须以存储全量ID的主表作为左关联的左表,4张业务指标表全部使用
LEFT JOIN关联 - 所有针对业务指标表的过滤条件,都需要写在对应
LEFT JOIN的ON子句中,禁止写在全局WHERE子句中 - 关联主键统一使用ID字段,未匹配到的指标字段会自动填充NULL,无需额外处理
示例SQL代码(可直接按表结构替换扩展)
CREATE TABLE 目标新表名 AS SELECT t.id, t1.measure_a, t1.measure_b, t2.measure_f, t2.measure_g, -- 此处继续补充剩余2张业务表的指标字段即可 FROM 主ID表 t LEFT JOIN 表1 t1 ON t.id = t1.id -- 表1的所有过滤条件都写在这里,不要放到全局WHERE中 LEFT JOIN 表2 t2 ON t.id = t2.id -- 表2的所有过滤条件都写在这里,不要放到全局WHERE中 -- 继续补充剩余2张业务表的LEFT JOIN逻辑即可 ;
效果验证
按照上述写法执行后,输出结果会完整保留主表的2500万条全量ID,关联失败的指标字段自动填充NULL,完全符合预期输出要求。
内容的提问来源于stack exchange,提问作者Pheonix
相关产品推荐
相关产品推荐

