美文网首页
sql中某字段重复记录的查询和处理

sql中某字段重复记录的查询和处理

作者: 丹丹后院 | 来源:发表于2017-10-24 10:53 被阅读0次

    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中某字段重复记录的查询和处理

          本文链接:https://www.haomeiwen.com/subject/szftpxtx.html