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

テーブル A.Application に値を設定する UPDATE クエリを作成しようとしています。更新する必要がある値は、テーブル 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
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 に答える
1

次の 2 つのステートメントで実行できます。

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 の名前が真に直交していると仮定すると、実際にデータに対して何かを行うのはそのうちの 1 つだけです。それ以外の場合は、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 に答える