先举例:
table:
字段一,字段二
a,1
a,2
a,3
我做如下查询:
select distinct 字段一 from table;得到如下查询结果:
字段一
a问题是这样,这个查询结果是以上表中的第几条记录?
也就是说,distinct操作是取重复记录中的哪一条?第一条,最后一条,或者是随机取值?

解决方案 »

  1.   

    根本不分是第几条,他就返回重复的值,有10个也是a,有100个a也是a
      

  2.   

    distinct这个关键字作用:
    查询出某个字段不重复的记录
    过滤掉多余的重复记录只保留一条。肯定不是取第几条记录!
      

  3.   

    我想知道distinct操作是通过什么方式,或者通过某种算法来选取相同数据中的某一条数据的。
    我举个例子,例如sql对distinct操作的步骤是这样的(这仅仅是一个举例,实际可能根本不是这么处理的)
    步骤一:建立一个临时表
    步骤二:扫描原表,获取原表中第一条记录中的数据(a或其他值)
    步骤三:判断数据(a或其他值)在临时表是否存在,如果不存在就把数据(a或其他值)插入临时表,否则跳过该记录
    重复步骤二直至原表中最后一条记录;
    这样就得到一个没有重复记录的临时表,把这个临时表中的数据查询出来就是所要的结果。
    总结来说,这个例子就是取原表中重复数据第一次出现的那条记录中的数据。我希望是能得到一个这样的分析结果。
    不过还是要谢谢你的回复。
      

  4.   

    楼主是个寻根究底的人阿。学者风范啊 。这个吗oracle的工作机理阿。我估计应该跟你那样的分析差不多。具体的只有oracle的开发人员才知道哦。
      

  5.   

     个人感觉应像是LZ分析的,我们并未做Oracle开发,只是把Oracle当作开发的工具而已。Distinct(列1)只是在该列上查找非相同的数据,别无他意。
      

  6.   

    我并没有单纯的对这个问题去寻根究底,而是这个问题涉及到具体业务的需求。
    我不想把这个需求再重复的表述一遍,大家如果感兴趣的话可以去这个地址看看:
    http://blog.csdn.net/zhuweifeng/archive/2008/09/22/2961105.aspx
      

  7.   

    需要取消完全重复的显示结果,可以使用DISTINC关键字。
      

  8.   

    select distinct(字段一),字段二 from table;
    你可以试一下加上字段二。
      

  9.   

    distinct只是单纯的取 重复的,
    如果你想取  字段二  是    1或者3的可以
    select 字段一,min(字段2) from 表名  group by 字段一
    得到的结果就是   a , 1 min改为max 就是  a,3
      

  10.   

    distinct 只有返回唯一值,不会取第几条这种说法
      

  11.   

    楼主你那个链接我看了,你那个需求跟distinct没有关系啊!A,1
    B,2
    A,3
    B,4
    无非是一个排序的问题。
    最终起到排序作用的也是字段二也就是数字那一列,跟前一列的字母没有任何关系!
      

  12.   

    如果你需要知道取得是第几条,那么光一个distinct A 本身就有问题了。