2013-10-06 87 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

谢谢..其工作正常。 –

相关问题