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)

你可能感兴趣的:(sql中某字段重复记录的查询和处理)