帮忙写一个sql语句,很简单的...(100分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
表A表B结构一样
===============
CODE NAME
11 abcd
12 hgdsfh
13 te5yuiiogr

现在表A和表B同一个code对应的name可能不一样,要用表A的来更新表B的name,
另外,表A中可能还有新添加的CODE,需要把相应的CODE,NAME添加到表B里面
sql server 7.0

 
只要一句吗?
 
实在不行2句也可以,快点.
 
还是补充一下吧,表B和表A结构并不完全相同,表B还有些附加字段,不过
code,name是相同的.
 
update B
set name=(select name from a
where code=b.code)

//这依据我现在没测试
Insert into B(code,name)
select a.code,a.name
from A
where not exists
(select * from B where A.code=B.code)
 
>>表A中可能还有新添加的CODE,需要把相应的CODE,NAME添加到表B里面
可以写一个触发器。
>>现在表A和表B同一个code对应的name可能不一样,要用表A的来更新表B的name,

设ta,tb的主键为code。
update tb set tb.name=
(select ta.name from ta where ta.code=tb.code)
where tb.code in
(select code from ta,tb where ta.code=tb.code and ta.name<>tb.name)

 
code不是主键(有重复), 不过同一表中code-name对应都是相同的
 
cAkk:
你说的我月来月糊涂了???
 
表A
===========
CODE NAME
11 AAAA
11 AAAA
11 AAAA
12 BBBB
13 DDDD
表B
===========
CODE NAME
11 KKKK
12 BBBB

在这种情况下,
1.需要用表A的 "11-AAAA"更新表B的"11-KKKK"
2.添加表A的"13-DDDD" 到表B里面
 
update B
set name=(select distinct name from a
where code=b.code)

//这依据我现在没测试
Insert into B(code,name)
select a.code,a.name
from A
where not exists
(select * from B where A.code=B.code)
 
Insert into B(code, name)
Select code, name
From A
Where code not in (Select code From A)
 
update不行,和你第一次错误一样,如果表A里面12-BBBB不存在,
就会把表B里面的"12-BBBB"改成"12-"

所以应该像zs2000那样判断一下表B的code是否在表A里面出现
但是zs2000的方法也有问题. 因为code不是主键.
 
Sorry!

Insert into B(code, name)
Select code, name
From A
Where code not in (Select code From B)
/ !
 
我上面说的"update不行,和你第一次错误一样"是指前卫说的.
 
我已经测试通过了。

第依据优化如下:

update B
set name=(select top 1 name from a
where code=b.code)

 
等等,我再想象。
 
前卫: 还是一样啊! 如果表A没有"12-BBBB",那么表B的"12-BBBB"就变成"12-"啦!

BTW: big_z和前卫的insert语句都已经通过测试,现在就看update语句了.
 
这句没问题。

update B
set B.name=IsNull(select top 1 name from a where code=b.code),B.Name)
 
cAkk:
Insert使用Big_Z的,他的效能搞,我本象那样写,但我记部其具体格式,所以使用
not Exists.
 
UPDATE b
SET name = a.name
FROM b INNER JOIN
a ON a.code = b.code
 
后退
顶部