我建了如下一张表:create table test_dis(
       t_id varchar2(10),
       t_name varchar2(20)
)insert into test_dis values('001', 'zhangsan')
insert into test_dis values('001', 'lisi')
insert into test_dis values('002', 'wangwu')
insert into test_dis values('003', 'wangwu')select  distinct(t_id) from test_dis
select  distinct(t_name) from test_dis
--以上两句select语句是对的select  distinct(*) from test_dis
select  distinct(t_id,t_name) from test_dis
select  distinct(t_id), distinct(t_name) from test_dis--这3句select语句是错误的,从逻辑上很好理解为什么是错的,因为如果不显示重复的列,那么从t_id中无法去确定是选第1还是---2行,同样从对t_name用distinct关键字也无法确定是选取第3还是第4行
在这里引出这个例子,目的是希望各位了解比较深入的大哥讲解一下distinct关键字的具体一点的用法,多举几个例子,希望能详细设计到每一个用法

解决方案 »

  1.   

    你在t_id上都已经使用了distinct了,那么使用distinct 之后的t_id与后面的t_name组合,当然不会有重复的,如何你这个时候再对t_name使用distinct,oracle就用当作异常来处理了!
      

  2.   

    一条select语句里面是不是只能出现一个distict,如果是,我要对2列使用它,语法是怎么样的(假设现在逻辑上没有错,假设这2列是完全一一对应的)
      

  3.   

    哦,我真是个笨蛋,如果2列完全一一对应,那对一列distinct就可以了,是一样的显示效果
      

  4.   

    对整行,即 select 出来的所以字段。
      

  5.   

    select  distinct * from test_dis
    select  distinct t_id,t_name from test_dis
    select  distinct(t_id), distinct(t_name) from test_dis //distinct只可以在一句SQL中,使用一次。
      

  6.   

    只能出现一次,那你的第3个select语句就是错的,对吧
    那如果要对2个字段组合使用distinct呢,可以这样吗
    select  distinct(t_id, t_name) from test_dis 
      

  7.   


    只能出现一次,那你的第3个select语句就是错的,对吧 
    那如果要对2个字段组合使用distinct呢,可以这样吗 
    select  distinct(t_id, t_name) from test_dis 
      

  8.   

    对于记录DISTINCT之后就只会有一条记录.而没有必要再DISTINCT别的字段了.
      

  9.   

    2个字段组合使用distinct
    -----------------
    select distinct t_id,t_name from test_dis
      

  10.   

    distinct 后面不要加括号, 没有什么意义.    distinct不是函数,是个关键字. 和sum,count...不同.
      

  11.   

    不知楼主明白了没??select distinct (t_id),(t_name) from test_dis;select distinct t_id,(t_name) from test_dis;select distinct (t_id),t_name from test_dis;select distinct t_id,t_name from test_dis;以上四个结果是一样的.
    select distinct (t_id,t_name) from test_dis; //语法错误
    distinct后面的括号,最容易误导人了..
      

  12.   


    我明白你的意思了,distinct是针对一整行排除重复的,如果查询多个字段,那么返回的是组合值不重复。但是我还有点小疑问,就你写的这个例子而言,如果我要同时显示t_id,t_name 两个字段,但是我只想t_name不重复,该怎么写sql语句啊(不考虑主键什么的)
      

  13.   

    select max(t_id),t_name 
    from test_dis
    group by t_name