我要求更新具有重复条目的Oracle记录(事先不知道),具体取决于我指定的条件,假设我的记录设置如下,
NAME BRANCH_ID DEL_FLG
-----------------------------------
AAA 00931 N
AAA 00001 N
BBB 00931 N
BBB 00008 N
CCC 00931 N
CCC 00003 N
DDD 00931 N
EEE 00931 N
FFF 00008 N
我想要的只是用BRANCH_ID = 00931更新重复记录并设置DEL_FLG ='Y'
输出必须如下,
NAME BRANCH_ID DEL_FLG
-----------------------------------
AAA 00931 Y
AAA 00001 N
BBB 00931 Y
BBB 00008 N
CCC 00931 Y
CCC 00003 N
DDD 00931 N
EEE 00931 N
FFF 00008 N
这可以用一个SQL完成吗?不使用PL / SQL
答案 0 :(得分:2)
update the_table set del_flag = 'Y'
where branch_id in
( select branch_id from the_table group by branch_id having count(*) > 1 )
或者
update the_table set del_flag = 'Y'
where branch_id = '00931' and name in
( select name from the_table group by name having count(*) > 1 )
(问题并不完全清楚,但正如Alex Poole指出的那样,第二个似乎与你给出的输出相匹配)
答案 1 :(得分:1)
我检查了这个,我认为这就是你想要的。
update the_table set del_flg = 'Y'
where rowid in
( select rowid from
(select rowid, count (*) over (partition by name) cnt
from the_table)
where cnt > 1)
and branch_id = 931;
结果: 前
NAME BRANCH_ID DEL_FLG
-------------------- -------------------- --------------------
AAA 1 N
BBB 931 N
BBB 8 N
CCC 931 N
CCC 3 N
DDD 931 N
EEE 931 N
FFF 8 N
AAA 931 N
9 rows selected
在
NAME BRANCH_ID DEL_FLG
-------------------- -------------------- --------------------
AAA 1 N
BBB 931 Y
BBB 8 N
CCC 931 Y
CCC 3 N
DDD 931 N
EEE 931 N
FFF 8 N
AAA 931 Y
9 rows selected