首页 新闻 会员 周边 捐助

在省市表数据库中更新市的缩写为省的缩写

0
悬赏园豆:50 [已解决问题] 解决于 2009-09-03 09:07

示例表(省的code为两位,市的code为四位,其中市的code前两位是省的code):

code       name   shortname

01     浙江省   zj

0101   杭州市   hz
0102   温州市   wz
02     福建省   fj

0201   泉州市   qz

现在要把所有的市的简写和所属省的简写一样

结果

code       name   shortname

01     浙江省   zj

0101   杭州市   zj
0102   温州市   zj
02     福建省   fj

0201   泉州市   fj

望能用一条sql语句写,不要用类似使用临时表的方法。

谢谢



 

 

HA-LOU的主页 HA-LOU | 初学一级 | 园豆:192
提问于:2009-09-02 22:13
< >
分享
最佳答案
0
Code

create table RegionName
(
code
char(4) not null primary key,
[name] nvarchar(8) not null,
shortname
varchar(8) not null,
)
Go

insert RegionName values('01', '浙江省', 'zj')
insert RegionName values('0101', '杭州市', 'hz')
insert RegionName values('0102', '温州市', 'wz')
insert RegionName values('02', '福建省', 'fj')
insert RegionName values('0201', '泉州市', 'qz')
Go
select * from RegionName
Go

update RegionName
set RegionName.shortname = s.shortname
from RegionName t, (select * from RegionName where len(code) = 2) s
where s.code = substring(t.code, 1, 2) and len(t.code) > 2
Go
select * from RegionName
Go


以上代码在 SQL SERVER 2005 下测试通过

收获园豆:40
eaglet | 专家六级 |园豆:17139 | 2009-09-03 08:28
多谢!完全可以,现在看来我的主要问题是不知道怎么set 。
HA-LOU | 园豆:192 (初学一级) | 2009-09-03 09:05
其他回答(2)
0

update table_name ta

set shortname = (

  select shortname

  from table_name

  where code = substring(ta.code, 0, 2)

) where len(code) > 2

不知道行不行,手头没有能测试的数据库软件

Gray Zhang | 园豆:17610 (专家六级) | 2009-09-02 22:40
0

update table1
set shortname= a.shortname from (select * from table1 where len(code)<3) a 
inner join table1 p on left(p.code,2)=a.code

这个..没测试,但是 肯定就得用这个方法,楼主可以测试一下

哈哈.[补充]已经测试过,,没有问题..等着收分。

收获园豆:10
邢少 | 园豆:10926 (专家六级) | 2009-09-03 08:50
谢谢,可以实现,不过,楼上那位已经所有的都帮我写好了。
支持(0) 反对(0) HA-LOU | 园豆:192 (初学一级) | 2009-09-03 09:06
@HA-LOU:郁闷....又被别人顶了...
支持(0) 反对(0) 邢少 | 园豆:10926 (专家六级) | 2009-09-03 09:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册