1. 程式人生 > >Oracle刪除冗餘資料,只保留一條

Oracle刪除冗餘資料,只保留一條

今天去面試,面試官提了一個問題,刪除oracle中的冗餘資料,只保留id最小的一條。當時沒有想明白,回來認真想了一下,總算有了點思路,現將sql貼出來,歡迎大家批評指正。

假設有這樣一個表city表,表中有兩個欄位,id和name。表中有10條資料。


需要刪除冗餘的資料,保留id最小,即id為1,name為北京和id為1,name為山西這兩條資料。


思路是這樣的,先把除這兩條資料的其他資料查出來,然後再刪除。

1、先查出冗餘資料

select *
  from city
 where name in (select name from city group by name having count(name) > 1)
   and id not in (select min(id) from city)


2、將冗餘資料刪除

delete from (
select *
  from city
 where name in (select name from city group by name having count(name) > 1)
   and id not in (select min(id) from city))

3、再查一次city表,表中的冗餘資料已經刪除了。