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

跨双Schema的DOMAINS表MERGE实现咨询:匹配NAME不操作,新增用旧ID

你的MERGE语句思路完全贴合需求,只需补全语法细节

你的核心逻辑完美匹配业务规则:通过NAME字段匹配新旧表记录,匹配到同名数据就保留新Schema的现有ID不做任何修改,未匹配到的新NAME记录则复用旧Schema的ID插入。不过需要把语句里的占位符和语法补全,以下是修正后的完整版本(以Oracle为例,不同数据库语法略有差异,但核心逻辑一致):

MERGE INTO domains a
USING (
    SELECT id, name, code, description 
    FROM <Old Schema 6.1>.domains@db_mig_61_to_74
) b
ON (a.name = b.name)
WHEN MATCHED THEN
    DO NOTHING  -- 匹配到同名记录,保留新Schema现有数据,不执行任何操作
WHEN NOT MATCHED THEN
    INSERT (a.id, a.name, a.code, a.description)
    VALUES (b.id, b.name, b.code, b.description);  -- 新记录复用旧Schema的ID插入

关键细节说明:

  • WHEN MATCHED THEN DO NOTHING:这是符合SQL标准的写法(Oracle 10g及以上支持),明确表示匹配到同名记录时不做任何修改/删除,完全满足你“保留现有ID且不合并”的需求。如果是更低版本的Oracle,也可以用WHEN MATCHED THEN UPDATE SET a.id = a.id(空更新操作)替代,效果一致。
  • VALUES子句完整性:必须把b表的所有对应列填入,确保插入的记录包含完整的NAME、CODE、DESCRIPTION信息,同时严格复用旧表的ID字段。

额外注意事项:

  • 确认新Schema的domains表中ID是否为主键/唯一约束:如果是,要提前校验旧Schema中待插入的ID没有被新Schema里其他不同NAME的记录占用,否则会触发主键冲突错误,这一点需要业务层面提前确认或做数据预检查。
  • 若使用的是其他数据库(比如SQL Server),DO NOTHING的写法会有差异(SQL Server需用WHEN MATCHED THEN UPDATE SET [ID] = [ID]这种空操作),要根据实际数据库类型调整语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:03:10