这里的重复数据指数据库中每一列的值都相同的数据,有时候也许是没有主键的原因导致数据可能重复,或者是,除了主键,其他数据重复,那么下面的方法可以都这些重复数据进行删除,保留下重复数据中的一行就可以。
大体可以分为两个方法 :一种要用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.col1and a.col2=b.col2 and a.col3=b.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)
第三种方法适合表中有少量重复数据的表
第四种方法:(临时表法)
Create table test2 as select distinct * from test;(建立临时表,表中存放不重复的值)
Truncate table test;(清空原来的表)
Insert into test select * from test2;(重新插入不重复的值)
当然第四种是比较麻烦的,也适合删除重复数据比较少的数据。
关于rowid,就是指数据库表中每一行的标示吧,
系统在你插入数据的时候要给每一行的数据分配一个rowid来进行标识每一行,从数据插入的那一刻起,rowid 就是定下来的了。