Oracle除去重复数据的三种sql写法

题材:3个表有自增的ID列,表中有一对笔录内容重复,相当于说那一个记录除了ID不一样之外,其余的音讯都相同。须求把重复的笔录保留一条,剩下的删减

 

方法一:依然两千年的时候一位Oracle
DBA叫罗敏发给技术部全部的(可惜原始邮件找不到了,要不然笔者当文物发给我们):
delete from temp
where id not in (
 select min(id) 
 from temp
 group by column1,column2,…,columnn)
 个人感觉那一个主意思路相比清晰。不过功效相对来说不高。

 

措施二:赵贲在互联网上搜出来的:
 –删除相同城市下的同等行政区
 delete a from area a where a.id>(select
min(id) from area b where a.area_id=b.area_id and
a.city_id=b.city_id)
 
方法三:使用sql
2005新增的row_number()功能和with关键字,小编是从赵立东那里学来的。

 

print(‘删除PriceInfo表中再次的记录’)
;WITH a AS (
 SELECT ROW_NUMBER()OVER (PARTITION BY
hotel_id,room_type_id,start_date,end_date
 ORDER BY hotel_id,room_type_id,start_date,end_date) AS rn ,* 
 FROM hotel_price
 )
delete from a WHERE a.rn>1

相关文章