我有以下情况:
Database A.table A.name
Database A.table A.Application
Database B.table B.name
Database B.table B.Application
Database C.table C.name
Database C.table C.Application
我正在尝试编写一个UPDATE查询,该查询将为表A.Application设置一个值。我需要更新它的值可能来自表B或C,但不是两者; A.name只存在于B或C中。我需要更新的每一行的条件如下:
If B.name exists for A.name, set A.Application = B.application
If C.Name exists for A.name, set A.application = C.application
我正在尝试非动态地执行此操作;任何帮助将不胜感激。
答案 0 :(得分:1)
您可以用两个语句来完成:
UPDATE A
SET A.Application = B.Application
FROM A
INNER JOIN B ON A.name = B.name;
UPDATE A
SET A.Application = C.Application
FROM A
INNER JOIN C ON A.name = C.name;
假设B和C中的名称真正正交,那么其中只有一个实际上会对数据做任何事情。否则,C赢。
或者你可以得到幻想(没有实际尝试过):
UPDATE A
SET A.Application = ISNULL(B.Application, C.Application)
FROM A
LEFT JOIN B ON A.name = B.name
LEFT JOIN C ON A.name = C.name
答案 1 :(得分:1)
declare @A table([name] varchar(1),[Application] int)
insert @A
select 'a',0 union all
select 'b',0 union all
select 'c',0
declare @B table([name] varchar(1),[Application] int)
insert @B
select 'a',5 union all
select 'b',6
declare @C table([name] varchar(1),[Application] int)
insert @C
select 'c',8
update @A set [Application]=b.[Application]
from @A a left join
(
select [name],[Application] from @B
union all
select [name],[Application] from @C
) b on a.name=b.name
select * from @A
/*
name Application
---- -----------
a 5
b 6
c 8
*/