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

SQL连接问题:基于ID和Time关联两表并保留所有时间记录

解决表连接保留所有Time记录的问题

核心问题分析

你用LEFT JOIN只能保留左表(table1)的所有记录,无法覆盖table2中独有的Time记录,要实现保留两个表所有Time记录、匹配字段正常显示、不匹配字段为NULL的需求,必须用FULL OUTER JOIN。

修正后的SQL

SELECT
    COALESCE(t1.ID, t2.ID) AS ID,
    COALESCE(t1.Time, t2.Time) AS Time,
    t1.Action,
    t2.`Total Downloaded`
FROM table1 t1
FULL OUTER JOIN table2 t2
    ON t1.ID = t2.ID 
    AND t1.Time = t2.Time;

关键说明

  • FULL OUTER JOIN:同时保留table1和table2中所有记录,两边无法匹配的字段自动填充NULL,正好满足你要保留所有Time记录的需求。
  • COALESCE():用来合并ID和Time列,确保不管记录来自哪个表,Time列都能展示对应的值(避免出现一边为NULL的情况)。
  • 若需兼容Time为NULL的匹配场景(比如ID相同且两边Time都为NULL时要匹配),可修改连接条件为:
    ON (t1.ID = t2.ID) 
    AND (t1.Time = t2.Time OR (t1.Time IS NULL AND t2.Time IS NULL))
    

原语句失效原因

LEFT JOIN的逻辑是左表所有记录必须保留,右表只保留匹配的记录,所以table2中不存在于table1的Time记录会被过滤掉,这是该连接类型的固有特性,无法通过调整连接条件改变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:52:08