日期:2014-05-16  浏览次数:20768 次

谁来帮忙写下效率高的SQL!!!!!
我有这样一张表
number name
123 张三
1234 李四
123 张三
456 李白
12345 杜甫

要求的数据:
规则1:先去掉表中的重复数据(比如:1、3条数据重复,处理后应该为一条)
规则2:取前三位为123的记录
帮忙写个效率高的SQL

------解决方案--------------------
10g及以上适用:
select * from
(select t.*, row_number() over(partition by number,name) rn from table t where regexp_like(name,'^123')
)
where rn = 1;
------解决方案--------------------
create table mytable (my_number varchar2(16), my_name varchar2(16));

select *
from mytable x
where my_number like '123%'
and rowid = (select min(rowid) from mytable where my_number=x.my_number and my_name=x.my_name);

------解决方案--------------------
探讨
select distinct number,name from table1
where substr(number,1,3)='123'
就好了

------解决方案--------------------
探讨
create table mytable (my_number varchar2(16), my_name varchar2(16));

select *
from mytable x
where my_number like '123%'
and rowid = (select min(rowid) from mytable where my_number=x.my_number and my_name=x.my_name);


------解决方案--------------------
顶楼上的 LIKE 123开头的可以用到索引的
------解决方案--------------------
探讨
select distinct number,name from table1
where number like '123%'