You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中合并不同表的日期列并作为统一索引

问题根因

  • 现有SQL的关联条件仅匹配了id字段,没有关联date字段,会导致同id不同日期的数据出现错误的笛卡尔积,输出结果不符合预期
  • SELECT子句中分别查询了三个表的date、id字段,因此会输出多组重复的日期、id列

解决方案

你可以用COALESCE函数合并三个表的date、id字段,同时完善关联条件,将date也加入关联逻辑,写法如下:

SELECT
  COALESCE(a.date, b.date, c.date) AS date,
  COALESCE(a.id, b.id, c.id) AS id,
  a.value AS a_value,
  b.value AS b_value,
  c.value AS c_value
FROM table_a a
FULL OUTER JOIN table_b b
  ON a.id = b.id AND a.date = b.date
FULL OUTER JOIN table_c c
  ON COALESCE(a.id, b.id) = c.id AND COALESCE(a.date, b.date) = c.date

COALESCE函数会返回参数列表中第一个非空的值,刚好可以兼容全连接场景下,某张表没有对应id和date数据时,依然能拿到正确的日期和id值。如果你提到的a、b、c是CTE,直接替换语句中的table_a、table_b、table_c为你对应的CTE名称即可。

如果你使用的SQL方言支持USING语法,写法可以更简洁,USING会自动合并关联的同名字段,无需手动写COALESCE:

SELECT
  date,
  id,
  a.value AS a_value,
  b.value AS b_value,
  c.value AS c_value
FROM table_a a
FULL OUTER JOIN table_b b
  USING (id, date)
FULL OUTER JOIN table_c c
  USING (id, date)

内容的提问来源于stack exchange,提问作者Rogue259

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 04:45:01