2012-07-20 75 views
1

我有一個包含4列和數千條記錄的表。我想刪除基於三列(如col1,col2,col3)重複的行。 我不得不刪除像在oracle中刪除重複的列

1) found a row which has col1 and col2 equal and 
2) in those duplicate record i have to delete those rows on which col3 is null- keep one row 
    (if no other record with combination of col1 and col2 doesn't have not null col3) 

col1 col2 col3 
---- ---- ---- 
1 1 null 
1 1 null 
1 2 null 
1 2 1 
1 2 1 
1 2 null 
1 2 2 
1 2 3 

基於標準排在這個例子中,我想刪除1或2。3,4,5,6有重複列,其中一些具有第三列不爲空我想只保留一個具有第三列不爲空(如果第三列也等於只保留一行)一行

回答

0
DELETE FROM table_name A WHERE ROWID > (SELECT min(rowid) FROM table_name B 
WHERE A.clmn1 = B.clmn1 AND A.clmn2 = B.clmn2 AND A.clmn3 is NULL AND b.clmn3 is NULL); 

檢查是否有任何錯誤的.. 評論。

+1

這甚至不通過對Oracle的語法檢查,也沒有查詢「> rowid」有任何意義。 – GWu 2012-07-20 15:15:31

+1

很明顯,&&的意思是「AND」,與ROWID的比較意味着只需選擇具有匹配列的一組記錄中的一個。 – 2012-07-23 15:00:51

2

假設你有數據,看起來像這樣:

 
col1 col2 col3 
---- ---- ---- 
1 1 null 
1 1 null 
1 2 null 
1 2 1 
1 2 2 
1 2 3 
1 2 null 

是否確定要刪除的前兩排,因爲col1col2匹配,並且col3爲空兩個?如果沒有,這是我的sql:

DELETE FROM table_name A 
WHERE exists (
    SELECT 1 
    FROM table_name B 
    WHERE A.col1 = B.col1 
    AND A.col2 = B.col2 
    AND B.col3 is not null) 
AND A.col3 is null 
+0

它正在刪除有空的前兩行。但我想刪除只有一行(如果沒有其他第三列不爲空) – mallikarjun 2012-07-21 08:05:51