删除数据库表中重复数据

这里的重复数据指数据库中每一列的值都相同的数据,有时候也许是没有主键的原因导致数据可能重复,或者是,除了主键,其他数据重复,那么下面的方法可以都这些重复数据进行删除,保留下重复数据中的一行就可以。

大体可以分为两个方法 :一种要用rowid来进行删除,另外一种,则是用临时表来进行删除。这里讲四种方法:

现在假设 表test中有,三个列col1,col2,col3;在这样的表里有很多数据是重复的,现在的目标是对这些数据中重复的数据进行删除,保留下的数据都是不重复的。

第一种方法:

Delete from test where rowid not in(
    select  max(rowid) from test group by col1,col2,col3);

第二种方法:

Delete form test 
    where (col1,col2,col3)      
        in(select col1,col2,col3 
            from test  group bycol1,col2,col3) and rowid not in(select max(rowid) 
                from test group by col1,col2,col3)

(跟第一种差不了多少,很常见的思维方式)

这里的删除适合删除表中有大量重复数据;

第三种方法:

Delete from test a 
    where a.rowid !=(select  max(rowid) 
        from test b
             where a.col1=b.col1 and a.col2=b.col2  and  a.col3=b.col3)

变形:

Delete from test a where a.rowid

第三种方法适合表中有少量重复数据的表

第四种方法:(临时表法)

Create table test2 as select distinct * from test;--建立临时表,表中存放不重复的值

Truncate table test;--清空原来的表

Insert into test  select * from test2;--重新插入不重复的值

当然第四种是比较麻烦的,也适合删除重复数据比较少的数据。

关于rowid,就是指数据库表中每一行的标示吧,

系统在你插入数据的时候要给每一行的数据分配一个rowid来进行标识每一行,从数据插入的那一刻起,rowid 就是定下来的了。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值