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

MySQL关联两张表时重复ID优先保留第一张表数据的实现问题

MySQL多表优先合并解决方案

核心逻辑

不需要做字段级合并判断,拆分两次查询后通过UNION ALL合并结果,完全规避COALESCE函数不支持数组类型的问题:

  1. 全量获取优先表COMPANIES ESTIMATED的所有数据
  2. 仅获取次表COMPANIES MIXED中ID未出现在优先表中的数据

具体实现

1. 直接查询合并结果

SELECT * FROM `COMPANIES ESTIMATED`
UNION ALL
SELECT * FROM `COMPANIES MIXED` m
WHERE NOT EXISTS (
    SELECT 1 FROM `COMPANIES ESTIMATED` e 
    WHERE e.id = m.id
)

2. 生成新的结果表COMPANIES FINAL

如果需要将结果持久化为新表,执行以下语句即可:

CREATE TABLE `COMPANIES FINAL` AS
SELECT * FROM `COMPANIES ESTIMATED`
UNION ALL
SELECT * FROM `COMPANIES MIXED` m
WHERE NOT EXISTS (
    SELECT 1 FROM `COMPANIES ESTIMATED` e 
    WHERE e.id = m.id
)

方案优势

  • 完全满足优先级规则:同ID数据仅保留COMPANIES ESTIMATED的整行内容,不会混入次表同ID数据
  • 兼容所有字段类型:不需要调用COALESCE等字段处理函数,字符串数组、JSON等复杂类型字段都可以完整保留原始值
  • 执行效率高:id字段加索引的情况下,千万级大表也可以快速完成合并

注意事项

  • MySQL中带空格的表名/字段名需要用反引号`包裹,如果你的实际表名使用下划线等合法标识符,可去掉反引号
  • 如果两张表的字段顺序不一致,将语句中的*替换为明确的字段列表,保证UNION前后两个查询的字段数量、顺序、类型完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:15:03