美文网首页数据库
1、SQL查询不重复记录方法

1、SQL查询不重复记录方法

作者: 唐僧用飘柔 | 来源:发表于2017-01-06 16:28 被阅读3359次
    由于设计需要,需要查询不重复的记录值,同类问题,想必大家都遇到过,于是乎马上GOOGLE一下,发现此类问题还挺多,解决方案也不少,仔细看看。

    例如有如下表结构和值--table

    fid name sex
    1 a
    2 b
    3 c
    4 d
    5 a
    6 b
    方案一:distinct
     select distinct name from table
    

    得到结果:
    name
    a
    b
    c
    d
    实现效果,那如果要同时打开其它记录呢?
    再试试

     select distinct name,id from table
    

    测试没什么效果,查下得知,这样实际是要name和id字段都重复才被筛选。

    继续查找可得如下方法:

    方案二:group by
     select *, count(distinct name) from table group by name
    

    Oracle下测试失败,据说MYSQL下通过,
    不管,继续思考....试试

    select min(fid),name,sex from table group by name  成功,
    

    现实如下结果:
    fid name sex
    1 a 男
    2 b 男
    3 c 女
    4 d 女

    继续思考,如果要打开所有记录,不指定字段用(*),貌似这方法就不行了!

    select * from table where fid in(Select min(fid) FROM table group by name)
    

    测试成功
    fid---name-----sex
    1-------a---------男
    2-------b---------男
    3-------c---------女
    4-------d---------女

    方案三:本来已经完了,突然想起前几天在网上查了查询数据中所有某字段不重复的记录
     select   *   from   table   
    
     where name in(select name from table group by name having count(name)=2)
    

    得到如下结果:
    fid name sex
    1 a 男
    2 b 男
    5 a 男
    6 b 男
    以此类推:

     select * from table   
    
      where name in(select name from table group by name having count(name)=1)
    

    按道理说没问题,大家试试~~再多的字段都全部现实。
    回顾网上方法distinct,Inner Join等等,麻烦,而且有很大局限性.

    总结如下:

    1. select distinct name from table打开不重复记录的单个字段
    2. select * from table where fid in(Select min(fid) FROM table group by name)打开不重复记录的所有字段值
    3. select * from table where name in(select name from table group by name having count(name)=1)打开不重复任意次数的所有记录

    相关文章

      网友评论

        本文标题:1、SQL查询不重复记录方法

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