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
相关产品推荐
相关产品推荐

