日期:2014-05-19  浏览次数:20710 次

百分求高效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

------解决方案--------------------
表結構設計不合理
索引字段的左邊最好不要用函數,會影響性能