当前位置: 代码迷 >> 其他数据库 >> sqlite3删除完全重复的数据有关问题,只留下一条
  详细解决方案

sqlite3删除完全重复的数据有关问题,只留下一条

热度:48   发布时间:2016-05-05 08:16:38.0
sqlite3删除完全重复的数据问题,只留下一条
有一个table,如下:
tbl_person:
id | name | age 
1       a          20
2       b          30
1       a          20
2       b          30
3       c         40
2       b          30
1       a          20
4       d         40
3       c         40
4       d          40
结果要得到
id | name | age 
1       a          20
2       b          30
3       c         40
4       d          40
,只用一条sqlite3语句,我这里只列出一小部分数据,实际上有19个字段,5000+条数据,其中重复数据600+,急,谢谢解答
------解决方案--------------------
表中增加唯一标识的字段ID才行
------解决方案--------------------
自行解决更好,rowid就是唯一标识的字段
------解决方案--------------------
添加一个临时表tbl_person_tmp,表结构和tbl_person一模一样,数据也录入进去,之后在tbl_person_tmp上添加一个自增列id,然后通过group by来删除,如下所示:


DELETE FROM tbl_person_tmp t2 WHERE NOT EXISTS(
SELECT MAX(id) id FROM tbl_person_tmp t GROUP BY t.a.t.b.t.c
);

然后删除自增id列,需要通过drop table,create table的方式来做。

最后rename 把tbl_person_tmp变成 tbl_person表。
------解决方案--------------------
引用:
问题已解决:
delete from tbl_person where rowid not in(select max(rowid) from tbl_person group by id)
删除完全重复数据,留下一条


rowid可以操作,删除重复的数据记录,实例如下:
sqlite> select * from company order by name;
ID          NAME        AGE         ADDRESS     SALARY      
----------  ----------  ----------  ----------  ----------  
2           Allen       25          Texas       15000       
5           David       27          Texas       85000       
7           James       24          Houston     10000       
7           James       28          Houston     20000       
6           Kim         22          South-Hall  45000       
4           Mark        25          Rich-Mond   65000       
4           Mark        29          Rich-Mond   95000       
3           Teddy       23          Norway      20000       
sqlite> 
sqlite> DELETE FROM COMPANY WHERE rowid NOT IN(SELECT MAX(rowid) rowid FROM COMPANY GROUP BY NAME);
sqlite> 
sqlite> select * from company;
ID          NAME        AGE         ADDRESS     SALARY      
----------  ----------  ----------  ----------  ----------  
2           Allen       25          Texas       15000