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

如何通过CONTACT表更新ROLES表,将重复联系人ID替换为组内最小ID?

问题解决方法

错误原因

原有MERGE语句的关联条件T1.ROWID = T2.ROWID不成立:ROWID是单表内的行唯一标识,ROLES表和CONTACT表的ROWID没有对应关系,因此没有匹配到任何行,返回0行合并。

正确实现

你需要先为CONTACT表的每一条记录生成对应分组的最小CONTACT_ID映射,再通过CONTACT_ID关联ROLES表执行更新:

修正后的MERGE语句

MERGE INTO ROLES T1
USING(
    SELECT
        CONTACT_ID,
        MIN(CONTACT_ID) OVER (PARTITION BY FIRST_NAME, LAST_NAME, PHONE) AS min_contact_id
    FROM CONTACT
) T2 ON (T1.CONTACT_ID = T2.CONTACT_ID) 
WHEN MATCHED THEN
UPDATE
SET  T1.CONTACT_ID = T2.min_contact_id;

兼容更多数据库的UPDATE写法

如果你的数据库不支持上述MERGE写法,也可以用通用UPDATE语句实现:

UPDATE ROLES r
SET CONTACT_ID = (
    SELECT MIN(c2.CONTACT_ID)
    FROM CONTACT c1
    JOIN CONTACT c2 
        ON c1.FIRST_NAME = c2.FIRST_NAME 
        AND c1.LAST_NAME = c2.LAST_NAME 
        AND c1.PHONE = c2.PHONE
    WHERE c1.CONTACT_ID = r.CONTACT_ID
)

注意事项

  • 如果ROLES表的CONTACT_ID字段存在外键关联约束,更新前需要暂时禁用约束,更新完成后再重新启用,避免触发外键校验报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 01:06:03