mysql数据去重

比如有一张students表,字段如下:

id
name
gender
score

我想根据namegender两个字段来去重,如果这两个字段都相同,只保留一个,应该怎么做呢?请各位大佬帮说一说。

阅读 12k
9 个回答

不管是加不加索引 group by 都比 distinct 快, 候建议选 group by.
可以亲自去测试一下

利用 group by 取得相同名称性别,最小的 id ,用来保留

select name,gender,min(id) as id from students
group by name,gender

删除不在保留列表的数据

select * from students
where id not in (
    select id from(
        select name,gender,min(id) as id from students
        group by name,gender
    )t1
)

建立 unique索引,这个索引包含 name和gender 两个字段

select distict name ,gender from students;
或者两次分组都行吧。

直接group by name,gender就可以了

快一点的方法不是去删除数据,你可以通过楼上们说得通过group by 或者 distinct 筛选出不重复数据,入新表,老表改名字确认无误后删除,看你数据量的多少决定,select into or insert into select 自己根据需要进行使用~

distinct 和 分组查询

select distinct name, gender from students

首先找出重复数据 然后再进行删除操作

select name,gender,count(1) from students group by name,gender,count(1) having count(1)>1

select * from students where name=? and gender=? --上面的查询结果  手动处理就好了 既然有重复数据只能手动进行处理
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题