百分求高效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
------解决方案--------------------表結構設計不合理
索引字段的左邊最好不要用函數,會影響性能