2013-04-08 8 views
16

私はこのような値を得ることがSelect文を使用して、第2のテーブルからの値に基づいて、テーブルに複数の列を更新したいと思います:SQLアップデート - 複数列

UPDATE tbl1 
SET (col1, col2, col3) = (SELECT colA, colB, colC 
          FROM tbl2 
          WHERE tbl2.id = 'someid') 
WHERE tbl1.id = 'differentid' 

はしかし、それはいないようです複数のカラム名を 'SET'することが可能ですが、各カラムごとに別々の更新文を書くのではなく、選択肢がありますか?

UPDATE tbl1 
SET col1 = (SELECT colA FROM tbl2 WHERE tbl2.id = 'someid') 
WHERE tbl1.id = 'differentid' 

UPDATE tbl1 
SET col2 = (SELECT colB FROM tbl2 WHERE tbl2.id = 'someid') 
WHERE tbl1.id = 'differentid' 

UPDATE tbl1 
SET col3 = (SELECT colC FROM tbl2 WHERE tbl2.id = 'someid') 
WHERE tbl1.id = 'differentid' 

答えて

21
update tbl1 
set col1 = a.col1, col2 = a.col2, col3 = a.col3 
from tbl2 a 
where tbl1.Id = 'someid' 
and a.Id = 'differentid' 
7

これは動作するはずです -

Update Tbl1 
    SET 
    Col1 = B.ColA, 
    Col2 = B.ColB, 
    Col3 = B.ColC 
    FROM 
    Tbl2 B 
    Where 
    B.Id = 'Someid' 
+0

を問題に見られるように、両方のテーブルには、同じIDを共有していないので、私はどこb.idための句は、=「someid」を置くことができますとtbl1.id = 'differentid' –

関連する問題