我設法組成了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