sql中某字段重复记录的查询和处理
1.查询重复记录
select 字段 from 表 group by 字段 having count(字段)>1;
2.只显示重复记录中的一条ID值最小或最大的记录
select * from 表 where 字段 in (select 字段 FROM 表 group by 字段
having count(字段 )>1 );
上面sql语句把字段重复的的所有值全部显示出,那么我们如何只显示一条id最小或最大的记录呢?
关键是在上面sql的where子句中select 语句
修改为
select min(id) from 数据表 group by 字段 having count(字段)>1
查询重复记录字段中ID最小值:
select * from 数据表 where 字段 in (select min(id) from 数据表 group by 字段 having count(字段)>1 );
查询重复记录字段中ID最大值:
select * from 数据表 where 字(select min(id) form 数据表 group by 字段 having count(重复记录字段)>1 );
3.对重复记录执行delete update
例如只保留最小id的一条
delete 数据表 where id not in
(
select 表别名.字段别名 from
(select min(id) 字段别名 from 数据表 group by 字段 having count(字段)>1) as 表别名
);
4.group by 字段 having count与distinct的区别
distinct只是将重复的行从结果中出去;
group by是按指定的列分组,一般这时在select中会用到聚合函数。
distinct是把不同的记录显示出来。
group by是在查询时先把纪录按照类别分出来再查询。
group by 必须在查询结果中包含一个聚集函数,而distinct不用。
总结:
对于重复记录关键是查出 :采用group by 字段 having count(字段)>1
取得最小id的一条(很关键) :采用min(id)