有一个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表。
------解决方案--------------------
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