update y set areacode=x.areacode from a x,b y where x.zip=y.zip
myclife(反方向的钟): 我这样做过,但他说结果有多个.
to myclife(反方向的钟): :),正确.原来我的表名搞错了.to wanyingsong(豌豆) 你的应该也是对的.第一个拿大头了.第二拿小头了.
不会阿,这样做肯定是对的是不是你的a表里的zip和areacode不是一一对应的
create table #ta(areacode char(3),zip char(6)) create table #tb(name char(3),areacode char(3),zip char(6),addr char(10)) go insert into #ta select '020','510000' union all select '020','510001'insert into #tb select 'BBB',NULL,'510000','BBBB' union all select 'BBB',NULL,'510000','BBBB' union all select 'BBB',NULL,'510001','BBBB' goselect * from #tb ========================================================== name areacode zip addr ---- -------- ------ ---------- BBB NULL 510000 BBBB BBB NULL 510000 BBBB BBB NULL 510001 BBBB ========================================================== go update #tb set areacode=(select areacode from #ta where #ta.zip=#tb.zip) go select * from #tb ========================================================== name areacode zip addr ---- -------- ------ ---------- BBB 020 510000 BBBB BBB 020 510000 BBBB BBB 020 510001 BBBB ========================================================== go drop table #ta drop table #tb
哦对了.表B中的有些记录zip字段是空的.
能肯定的是表a中的zip值(无空值)在表B中是绝对找得到的.
第一个:肯定不行,因为a.zip=b.zip 会找出多个值不管这个值是不是相同。 如果同一个zip对应的阿areacode没有不同的话可以试试用 update b set areacode=(select distinct areacode from a where a.zip=b.zip 如果一个zip对应的areacode有不同就不好办了。
首先,你的 表a 中的Zip应该确定是唯一的,如果表b有null值,加个where就可以了吧, ... where isnull(表b.zip)=false
我怀疑你的表a中存在这样的纪录areacode zip ------------------- 020 510000 020 510001 021 510000所以才会说“查询结果有多个”
你得明确一下a.areacode和b.areacode的对应关系。
zip-->areacode n : 1b.zip的所有值(除了null)都来之a.zip,a.zip值唯一无重复值(设计上是这样子的,怎么测试是否唯一?).
我这样做过,但他说结果有多个.
:),正确.原来我的表名搞错了.to wanyingsong(豌豆)
你的应该也是对的.第一个拿大头了.第二拿小头了.
create table #tb(name char(3),areacode char(3),zip char(6),addr char(10))
go
insert into #ta
select '020','510000' union all
select '020','510001'insert into #tb
select 'BBB',NULL,'510000','BBBB' union all
select 'BBB',NULL,'510000','BBBB' union all
select 'BBB',NULL,'510001','BBBB'
goselect * from #tb
==========================================================
name areacode zip addr
---- -------- ------ ----------
BBB NULL 510000 BBBB
BBB NULL 510000 BBBB
BBB NULL 510001 BBBB
==========================================================
go
update #tb
set areacode=(select areacode from #ta where #ta.zip=#tb.zip)
go
select * from #tb
==========================================================
name areacode zip addr
---- -------- ------ ----------
BBB 020 510000 BBBB
BBB 020 510000 BBBB
BBB 020 510001 BBBB
==========================================================
go
drop table #ta
drop table #tb
如果同一个zip对应的阿areacode没有不同的话可以试试用
update b
set areacode=(select distinct areacode from a where a.zip=b.zip
如果一个zip对应的areacode有不同就不好办了。
-------------------
020 510000
020 510001
021 510000所以才会说“查询结果有多个”
n : 1b.zip的所有值(除了null)都来之a.zip,a.zip值唯一无重复值(设计上是这样子的,怎么测试是否唯一?).