多表日期关联的Left Outer Join实现:同日期数据合并至单行
多表日期合并关联的实现方案
要实现你需要的结果,核心是先收集所有涉及的日期与ID的唯一组合,再以此为基础关联主表和各子表,具体SQL写法如下:
核心思路
- 用
UNION合并B、C、D表中的ID_A和date,去重得到所有需要展示的日期-ID组合; - 将这个组合集合与主表A关联,确保主表信息能对应到每一行;
- 分别左连接B、C、D表,通过
ID_A和date双字段关联,拉取对应日期的各子表数据,无数据的字段会显示为空(NULL)。
SQL示例代码
SELECT a.ID_A AS ID, a.infoA AS infoA, dates.date, b.infoB, c.infoC, d.infoD FROM -- 收集所有唯一的ID-日期组合 (SELECT ID_A, date FROM B UNION SELECT ID_A, date FROM C UNION SELECT ID_A, date FROM D) AS dates -- 关联主表A LEFT JOIN A a ON dates.ID_A = a.ID_A -- 分别左连各子表 LEFT JOIN B b ON dates.ID_A = b.ID_A AND dates.date = b.date LEFT JOIN C c ON dates.ID_A = c.ID_A AND dates.date = c.date LEFT JOIN D d ON dates.ID_A = d.ID_A AND dates.date = d.date -- 按日期排序(可选,让结果更规整) ORDER BY dates.date;
代码说明
UNION会自动去重,避免同一日期-ID组合重复出现;- 所有关联都用
LEFT JOIN,确保即使某子表没有对应日期的数据,该行仍会保留,对应字段显示为空; - 关联条件同时使用
ID_A和date,保证是同一ID下的同一日期数据匹配。
内容的提问来源于stack exchange,提问作者Baobe
相关产品推荐
相关产品推荐

