2013-10-06 127 views
0

下面是我的表中包含的記錄。我想刪除所有重複行和結果必須包含具有ID的50,10,20,30行,40如何刪除保留其他唯一行的重複行?

感謝

50 Engineering Pune 
50 Engineering Pune 
50 Engineering Pune 
50 Engineering Pune 
50 Engineering Pune 
50 Engineering Pune 
50 Engineering Pune 
50 Engineering Pune 
50 Engineering Pune 
10 ACCOUNTING  NEW YORK 
20 RESEARCH  DALLAS 
30 SALES   CHICAGO 
40 OPERATIONS  BOSTON 
+1

可能重複的[刪除表中的重複項](http://stackoverflow.com/questions/10017027/sql-to-delete-the-duplicates-in-a-table)或[Oracle PL/SQL - 如何刪除SQL表中的多個重複記錄?](http://stackoverflow.com/questions/6455941/oracle-pl-sql-how-to-delete-multiple-duplicate-records-in-the-sql-table? rq = 1) –

+0

你想刪除重複表單數據庫表..或你想查詢Ÿ它沒有重複... – Avi

回答

0

在Oracle中相同的行之間的不同的是,所有行了獨特的rowid 那裏你可以通過你的所有列 查詢是這樣的ROWID的使用最小或最大與組:

DELETE FROM tableName 
WHERE ROWID NOT IN (SELECT MAX (ROWID) 
       FROM tableName 
       GROUP BY ID, NAME, place 
       ); 
+0

感謝@Hamidreza爲您的答案,它的工作正常。 –

0

我想我應該這樣做:

http://sqlfiddle.com/#!4/f0ea9/7

delete example 
where rowid in (
    select r_id 
    from (
     select 
      rowid r_id, 
      row_number() over(partition by e.dep_id, e.dep_name, e.place order by e.dep_id) rnum 
     from example e 
    ) 
    where rnum > 1 
); 

解析函數row_number() over()確定要刪除哪些行;您想要刪除第二個,第三個等等,即rnum > 1。我使用rowid是因爲你的桌上似乎沒有主鍵(這是個好主意?)。

0

使用MIN(rowid)

DELETE FROM table 
WHERE ROWID NOT IN (SELECT MIN (ROWID) 
        FROM table 
        GROUP BY ID, NAME, place 
        ); 

請參閱本link,這會告訴你從表中刪除重複數據的不同方式。

+0

謝謝..其工作正常。 –

相關問題