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

如何将SQL缺失记录与更新记录查询合并为单条语句?

合并SQL查询的解决方案

可以通过一次LEFT JOIN并在WHERE子句中组合两个条件,替代原来两条查询加UNION DISTINCT的写法,同时满足获取缺失记录和更新记录的需求:

SELECT
  source.id,
  source.modified_at
FROM source
LEFT JOIN destination
  ON source.id = destination.id
WHERE 
  destination.id IS NULL 
  OR source.modified_at > destination.modified_at;

逻辑说明

  • 获取缺失记录:LEFT JOIN后destination.id IS NULL的条件,会筛选出所有在source表存在但destination表中无匹配id的记录,和你原“缺失记录”查询逻辑完全一致。
  • 获取更新记录:source.modified_at > destination.modified_at的条件,会筛选出source与destination有匹配id,但source记录更新时间晚于destination对应记录的情况,精准匹配你需要的“源表最新数据”需求。

对比原写法的优势

  • 省去UNION DISTINCT带来的额外去重开销,查询效率更高。
  • 单条语句逻辑紧凑,更便于维护和理解。

注:如果你的业务逻辑确实需要基于destination表的全局最大更新时间筛选(而非单条记录对比),可以调整WHERE条件为:

WHERE 
  destination.id IS NULL 
  OR source.modified_at >= (SELECT MAX(modified_at) FROM destination);

这种写法会筛选出所有更新时间晚于等于destination全局最新时间的源记录,同时保留缺失记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:00:08