0

我有以下情况:

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

我正在尝试以非动态方式执行此操作;任何援助将不胜感激。

4

2 回答 2

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
于 2012-05-29T21:10:57.467 回答
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
*/
于 2012-05-30T04:20:59.927 回答