
本人搞到了学校的学籍信息。源文件是 VF 的数据表文件,我通过软件把这些文件导入到 Mysql 里面去的。
可能是有的数据表文件重复导入了,在我给数据表的学号和考生号字段做主键的时候,提示值重复。
请教 Mysql 的去重方法。
数据表结构前三个字段是:
考生号(KSH),学号(XH),姓名(XM)
能做主键的只有考生号和学号,但现在这张表有主键,考生号和学号有重复记录。
我目前的思路是:
//查询重复的考生号
select KSH from tableName group by KSH having count(KSH) > 1
//删除重复的记录
delete from tableName where (select KSH from tableName group by KSH having count(KSH) > 1)
但是这样,会把所有的重复记录都删掉。例如我查询出来考生号 001 重复了,如果以考生号 001 作为删除条件的话,整张表的考生号 001 的记录都会被删掉,我想保留一条记录啊。
请指教。
1 liuhaotian 2016-02-28 09:20:03 +08:00 via iPhone 有两个思路,手机没法写完整了 一个是 LIMIT ( select count )-1 一个是 where id<( select id ORDER BY id DESC LIMIT 1 ) |
2 Neveroldmilk 2016-02-28 09:28:06 +08:00 笨办法是建立一个临时表,存储原始信息(去除冗余信息可以用 group by 命令),然后删除原表所有重复记录,最后把临时表信息插回去。 |
3 Duolingo 2016-02-28 09:37:04 +08:00 via iPad Distinct, not distinct |
4 ligyxy 2016-02-28 09:37:30 +08:00 |
5 zonghua 2016-02-28 09:58:19 +08:00 via iPhone |
6 est 2016-02-28 10:27:39 +08:00 新建表,然后把数据 insert ignore 过去 |
  7 soulgeek 2016-02-28 10:34:20 +08:00 alter ignore table *** add unique index 建唯一索引,重复的会保留一条记录;要有 ignore 标志,否则会提示重复 |
8 ianisme 2016-02-28 11:08:38 +08:00 create table tmp as select min(comment_ID) as col1 from wp_comments group by comment_date; delete from wp_comments where comment_ID not in (select col1 from tmp); drop table tmp; 这是我在清除 wordpress 重复评论时候写的语句,你可以借鉴下 http://www.ianisme.com/it/1998.html |
10 zrp1994 2016-02-28 12:58:43 +08:00 via iPhone partition over 语句 |
11 fy 2016-02-28 13:43:07 +08:00 楼主啊 这种一次性的工作,完成了就行,手段优雅不优雅,根本不在乎的。 用最耿直最朴实最简单最慢的办法就行了。 |
12 ianisme 2016-02-28 20:50:14 +08:00 不会漏数据的 |
13 domty 2016-03-31 15:03:51 +08:00 ```SQL SELECT * FROM tableName WHERE XH IN ( SELECT XH FROM tableName GROUP BY KSH HAVING count(KSH) > 1 ) AND XH NOT IN ( SELECT max(XH) FROM tableName GROUP BY KSH HAVING count(KSH) > 1 ) ORDER BY KSH ``` 这个是查询所有重复考生号的结果集,同时剔除相同考生号中学号最大的情况。 你可以试试,如果删除的话你把 select * from 改成 delete from 就行了 |