我设法组成了sql查询,以将包含组合的重复行更新为2字段表的空值。但是,我坚持超过2场表。在Oracle上识别n字段数据表的重复组合
我的2场的解决方案是:
插入测试数据组合表:
create table combinations as
select 1 col1, 2 col2 from dual --row1
union all
select 2, 1 from dual --row2
union all
select 1, 3 from dual --row3
union all
select 1,4 from dual; --row4
从组合表ROW1和ROW2是重复的,因为元素的顺序并不重要。
更新复制组合为null 2场(更新2行是null):
update combinations
set col1=null, col2=null
where rowid IN(
select x.rid from (
select
rowid rid,
col1,
col2,
row_number() over (partition by least(col1,col2), greatest(col1,col2)
order by rownum) duplicate_row
from combinations) x
where duplicate_row > 1);
我上面的代码依赖于最少(,)和最大()函数,这就是为什么它的作品整齐。任何想法将此代码调整为3字段表?
为组合2' 表中插入测试数据(3-场)
create table combinations2 as
select 1 col1, 2 col2, 3 col3 from dual --row1
union all
select 2, 1, 3 from dual --row2
union all
select 1, 3, 2 from dual --row3;
组合2表3场具有ROW1,ROW2,ROW3它们是相等的。我的目标是将row2和row3更新为null。
好像是这个一样的问题:http://stackoverflow.com/questions/5924118/sql-and-unique-n-coulmn-combinations – 2011-05-09 14:51:47