读书人

百分求高效SQL语句解决方案

发布时间: 2012-02-21 16:26:23 作者: rapoo

百分求高效SQL语句
有两个表,如下

t_user_info
-----------------------------
usr1:手机号、小灵通、电话号
usr2:手机号、小灵通、电话号

这两个字段有一个为空(NULL)

t_tel_area
-----------------------------
tel:手机号段,长7位
province:所属省
city:所属市
codearea:区号,长3-5位

现在我想联合两个表建立一个视图,指出用户的归属地,也就是说从第二个表中找到第一个表的用户的归属地,如果只有手机号好写
create view v_user_info as
select a.*,b.province from t_user_info a left join t_tel_area on left(a.usr1,7)=b.tel or left(a.usr2,7)=b.tel

问题是区号长度不一样,不能像手机号段那样用left了,用like速度又太慢了,请教高人我该如何写?

[解决办法]
1、建立索引,用like未必慢。
[解决办法]
create 试图
as
select * from t_user_info a ,t_tel_area b where a.usr=b.tel
union all
select * from t_user_info a ,t_tel_area b where left(a.usr1,len(b.codearea)) = b.codearea
这样应该可以
[解决办法]
create view v_user_info
as
select
a.*,b.province
from
t_user_info a
left join
t_tel_area b
on
a.usr1 like b.tel+ '% '

union all
select
a.*,b.province
from
t_user_info a
left join
t_tel_area b
on
a.usr2 like b.tel+ '% '
go


or:


create view v_user_info
as
select
a.*,b.province
from
t_user_info a
left join
t_tel_area b
on
charindex(b.tel,a.usr1)=1
union all
select
a.*,b.province
from
t_user_info a
left join
t_tel_area b
on
charindex(b.tel,a.usr2)=1
go

[解决办法]
表不合理
索引字段的左最好不要用函,影性能

读书人网 >SQL Server

热点推荐