0

if に基づいて、テーブル A の列をテーブル B 列の値で更新しようとしていますTable A.col1 = TableB.Col1

問題: TableA 列の値をNullifCol1が に見つからない場合に上書きしますTableB.Col1

私の現在のクエリは

UPDATE [tableA]
SET col2 = (SELECT col2 FROM [tableB] WHERE [TableB].col1 = [TableA].col1)

どうすればこれを回避できますか?

例: テーブル A

Col1 Col2
1    100
2    200
3    300

表B

Col1 Col2
1    1000
3    3000

結果のテーブルは次のようになります。

表 A

Col1 Col2
1    1000
2    200
3    3000

しかし、私は得る:

Col1 Col 2
1    1000
2    null
3    3000

何か案は?

4

3 に答える 3

1

あなたがすることができます:

UPDATE [tableA]
SET col2 = COALESCE(
             (SELECT col2 FROM [tableB] WHERE [TableB].col1 = [TableA].col1),
             col2)

COALESCE引数の中で最初の非 NULL 式を返します。

または、次のようにすることもできます。

UPDATE a
SET col2 = b.col2
FROM TableA a
    INNER JOIN
     TableB b
        ON
            a.col1 = b.col1

ただし、この 2 番目の形式は SQL Server の方言であり、標準の SQL ではないことに注意してください。

于 2013-07-26T15:34:25.030 に答える
1

テーブル全体を更新したくないため、クエリにwhere句が必要です。この場合 :

WHERE exists (select 1 
                from [tableB] 
                where [TableB].col1=[TableA].col1 
                  and [TableB].col2 is not NULL -- that condition may or may not be needed 
             )
于 2013-07-26T15:04:34.847 に答える
0

これでうまくいくはずですよね?

UPDATE [tableA]
SET col2= (select col2 from [tableB] where [TableB].col1=[TableA].col1 and [TableB].col1 IS NOT NULL )
于 2013-07-26T14:55:52.733 に答える