2014-01-08 77 views
0

重複數據我有以下結構刪除從列

Id Pro_id  name  price 
    ---------------------------------------- 
    1 001   ABC  200 
    1 002   XYZ  100 
    1 003   XYZ  150 
    2 004   PQR  100 
    2 005   PQR  100 
    2 006   LMN  200 
    2 007   LMN  300 
    2 008   DEF  150 

的桌子,你可以看到有在「名稱」列中的某些重複的名稱。
我想刪除所有重複的名字(只需要保持第一輸入的名稱,並刪除其餘的)

所以我的表應該喜歡 -

Id Pro_id  name  price 
---------------------------------------- 
1 001   ABC   200 
1 002   XYZ   100 
2 004   PQR   100 
2 006   LMN   200 
2 008   DEF   150 

我嘗試以下得到複製業者名稱

SELECT ID, NAME, count(NAME) FROM TABLENAME 
GROUP BY ID, NAME HAVING count(NAME)>1 

但現在我無法走得更遠,在如何刪除記錄方面陷入困境。

有什麼想法嗎?

回答

1

沒有「第一」,在SQL作爲選擇的順序一般是不確定的,所以下面將保留條目與Pro_id對於重名的最低值,但你可以自由定義不同的聚合:

DELETE FROM tablename 
WHERE Pro_id NOT IN (SELECT MIN(Pro_id) FROM tablename GROUP BY name); 
+0

似乎很容易讓我試試這個 –

+0

這對我的作品.. thenks很多。 –

2

您可以嘗試SQL(在MySQL中它的工作原理)以下

delete t1.* from tablename t1 
    inner join 
tablename t2 ON t1.name = t2.name 
    AND t1.Pro_id > t2.Pro_id 
+0

它在Oracle中不起作用。 – San

0

你可以嘗試這樣的事情

delete from table1 
where rowid in 
( 
    select rid 
    from 
     (
     select rowid as rid, 
       row_number() over (partition by name order by pro_id) as rn 
     from table1 
     ) 
    where rn > 1 
) 

還沒有測試它

1
DELETE FROM table_name 
WHERE rowid NOT IN 
       ( 
       SELECT MIN(rowid) 
       FROM table_name 
       GROUP BY column1, column2, column3... 
       ) ;