create index idx_t on t(a, b, c);select * from t where a = b = c;
我刚才表达错了 应该是 不同的两条记录 里面的三个字段(a,b,c,)都一样 比如 SID a b c 1 1 李 OK 2 1 李 OK这样的两条记录 不好意思
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;
这个方法应该是最快的: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)
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类型的字段值的比较不起作用; 请指点谢谢!
可以用to_char()函数格式化一下
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;
也可以用分析函数 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
用分析函数的话,一般会少掉一个记录 可以这么写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
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;
应该是
不同的两条记录
里面的三个字段(a,b,c,)都一样
比如
SID a b c
1 1 李 OK
2 1 李 OK这样的两条记录
不好意思
where
rowid != (select max(rowid) from tbl 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类型的字段值的比较不起作用;
请指点谢谢!
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
可以这么写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
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;