日期:2014-05-18  浏览次数:20518 次

表字段合并问题,求大家帮忙指点.....
表a和表b的表结构完全相同,例如表字段有:id,   name,   age等,其中id为表的主键,现在要将表a合并到表b中去.
合并规则为:
如果表a中id与表b相同,对于某一字段,如表b中为空,而表a有,则记录表a的;如表b中有,而表a中无,则保留原有的;如果两个表均有,则用前者替换.
应该怎么写SQL语句,谢谢啦~~~分不够可以再加.....


------解决方案--------------------
update n
set
name=isnull(m.name,n.name),
age =isnull(m.age ,n.age )
from
a m,b n
where
m.id=n.id --之前将别名写错了,修正一下

------解决方案--------------------
--用CASE WHEN 就可以了
create table a(id int , name varchar(10), age int, home varchar(10))
insert a
select 1, 'abc ',17, ' ' union all
select 2, 'def ',18, ' ' union all
select 3, 'ghi ',19, ' '

create table b(id int , name varchar(10), age int, home varchar(10))
insert b
select 2, 'def ',8, '广东 ' union all
select 3, 'ghi ',9, '湖南 ' union all
select 4, 'jkl ',10, '江西 '
go

update n
set
name=case when n.name is null or n.name= ' ' then m.name else n.name end,
age =case when n.age is null or n.age= ' ' then m.age else n.age end,
home=case when n.home is null or n.home= ' ' then m.home else n.home end
from
a m,b n
where
m.id=n.id

select * from b

drop table a,b

/*
id name age home
-----------------------------------
2 def 18 广东
3 ghi 19 湖南
4 jkl 10 江西
*/