查一个表中
三个字段的值都相同的记录要怎么写SQL速度最快?比如
表A中有  a   b    c 仨字段

解决方案 »

  1.   

    create index idx_t on t(a, b, c);select * from t where a = b = c;
      

  2.   

    我刚才表达错了
    应该是
    不同的两条记录
    里面的三个字段(a,b,c,)都一样 
    比如
    SID   a    b    c
     1    1    李    OK
     2    1    李    OK这样的两条记录
    不好意思
      

  3.   

    create index idx_t on t(a, b, c);select a.sid, b.sid, a.a, a.b, a.c from tt a, tt b where a.a = b.a and a.b = b.b and a.c = b.c;
      

  4.   

    这个方法应该是最快的:select * from tbl a 
    where 
    rowid != (select max(rowid) from tbl b where a.a=b.a and a.b=b.b and a.c=b.c)
      

  5.   

    select a.sid, b.sid, a.a, a.b, a.c from tt a, tt b where a.a = b.a and a.b = b.b and a.c = b.c;
    谢谢 
    但是我遇到这样的情况 
    我的数据库表中 a字段的类型是date的,那么用a.a = b.a来比较就不行了
    “2009-08-05 00:00:00.0”字段的值是这样的,用a.a = b.a来比较根据结果来看 好像对date类型的字段值的比较不起作用;
    请指点谢谢!
      

  6.   

    可以用to_char()函数格式化一下
      

  7.   

    select a.sid, b.sid, a.a, a.b, a.c from tt a, tt b where to_char(a.a, 'yyyy-mm-dd hhmiss') = b.a and a.b = b.b and a.c = b.c; 
      

  8.   

    也可以用分析函数 
    select sid,a,b,c
    from 
    (
    select sid,a,b,c,row_number() over(partition by a,b,c order by sid) sn from a 
    ) where sn>1
      

  9.   

    用分析函数的话,一般会少掉一个记录
    可以这么写select sid,a,b,c 
    from 

    select a.*,row_number() over(partition by a,b,c order by sid) rn1,
    row_number() over(partition by a,b,c order by sid desc) rn2 from a 
    ) where rn1>1 or rn2>1 
      

  10.   


    select sid,a,b,c
    from(
    select a.*,count(*) over(partition by a.a,a.b,a.c order by a.sid) rn1
    from tbl)
    where rn1>1;