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

Oracle中为重复行按reference1分组分配相同group_id的问题

解决相同reference1行分配同一group_id的问题

你的问题出在原UPDATE语句会对每一行单独调用journals_seq.nextval,导致每条记录都生成唯一的序列值。要实现相同reference1对应同一个group_id,需要先为每个唯一的reference1分配一次序列值,再批量更新对应行。

方法1:使用MERGE语句(推荐)

MERGE INTO journals_cv027_tab t
USING (
    SELECT 
        reference1,
        journals_seq.nextval AS new_group_id
    FROM journals_cv027_tab
    WHERE group_id IS NULL
    GROUP BY reference1
) s
ON (t.reference1 = s.reference1 AND t.group_id IS NULL)
WHEN MATCHED THEN UPDATE SET t.group_id = s.new_group_id;
COMMIT;

方法2:使用UPDATE关联子查询

UPDATE journals_cv027_tab t
SET group_id = (
    SELECT new_group_id
    FROM (
        SELECT 
            reference1,
            journals_seq.nextval AS new_group_id
        FROM journals_cv027_tab
        WHERE group_id IS NULL
        GROUP BY reference1
    ) s
    WHERE s.reference1 = t.reference1
)
WHERE t.group_id IS NULL;
COMMIT;

原理说明

两个方法都是先通过GROUP BY reference1获取所有唯一的reference1值,对每个值调用一次journals_seq.nextval生成唯一的group_id,再将这个值同步给所有对应reference1的空group_id行,确保同一组的行共享同一个序列值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:33:20