哪种性能,好方法好?讨论

sql server 2000
数据库有下表
table1
代码 姓名 地区
01 张三 001
02 李四 002
03 王五 003

table2
地区代码 地区名称
001 南宁
002 柳州

结果:
姓名 地区名称
张三 南宁
李四 柳州
王五 003

现有几种实现方式,请问各的优点和劣势,哪种比较好。
1、select 姓名,case when (select 地区名称 from table2 where table2.地区代码=table2.地区 ) is null then table1.地区 else (select 地区名称 from table2 where table2.地区代码=table2.地区 ) end as 地区名称 from table1

2、select table1.姓名,table2.地区名称 from table1,table2 where table1.地区=table2.地区代码

3、select table1.姓名,table2.地区名称 from table1 LEFT OUTER JOIN table2
on table1.地区=table2.地区代码

第一种方法可以得到我想要的,但好象方法不好,第二种方法王五就没有返回,第三种方法王五也返回,只是地区名称显示null。
我想要能最大程度满足要求,效率又高的方法,有没有更好的方法?
讨论有分。

---------------------------------------------------------------

注意:
没有达到功能要求的不要拿出来讨论。

select 姓名,case when B.地区名称 IS NULL THEN A.地区 ELSE B.地区名称
end as 地区名称
from table1 A LEFT JOIN table2 B ON A.地区=B.地区

---------------------------------------------------------------

最好的方法:
select a.姓名,isnull(b.地区名称,a.地区) as 地区名称
from table1 a
left join table2 b on a.地区=b.地区代码
---------------------------------------------------------------

方法一效率不好,不建议使用,方法2根本就不对,所以没用,方法3思路对了,可是还有错误,你应该修改为

select a.姓名,isnull(a.地区名称,a.地区) as 地区名称
from (select a.姓名,a.地区,b.地区名称
from table1 a left outer join
table2 b on a.地区=b.地区代码) a

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus