- 締切済み
UPDATE 副問合せで複数のフィールドを一度に更新したい
tabelA key |fld1|fld2|fld3 001 |0 |10 |A 002 |0 |11 |B 003 |0 |12 |C 004 |0 |13 |D 005 |0 |14 |E tabelB key |fld1|fld2|fld3 001 |2 |10 |A 002 |0 |11 |B 003 |0 |22 |C 004 |0 |13 |X 005 |0 |14 |E -結果- tabelA key |fld1|fld2|fld3 001 |2 |10 |A 002 |0 |11 |B 003 |0 |22 |C 004 |0 |13 |X 005 |0 |14 |E tabelAとtabelBを比較して tabelBのfld1~fld3のいずれかが違うレコード (key=001,003,004)だけ tabelAをUPDATEし、tabelBと同じ値にしたい。 1fldでも変更があれば、全fld更新します。 fldごとにはできたのですが 全フィールドをまとめて更新することができません。 使用DB:SQL Server2000、2005 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- jamshid6
- ベストアンサー率88% (591/669)
もしかして、 ・個別フィールドを指定せず、「*」などを使って全フィールド更新したい という意味での質問だったとしたら、そういうことはできません。 一応普通な更新方法も書いておきますが。。。 UPDATE tableA SET fld1=x.fld1,fld2=x.fld2,fld3=x.fld3 FROM tableA a INNER JOIN (SELECT [Key],fld1,fld2,fld3 FROM tableB EXCEPT SELECT [Key],fld1,fld2,fld3 FROM tableA) x ON x.[Key]=a.[Key] または UPDATE tableA SET fld1=b.fld1,fld2=b.fld2,fld3=b.fld3 FROM tableA a INNER JOIN tableB b ON b.[Key]=a.[Key] WHERE a.fld1<>b.fld1 or a.fld2<>b.fld2 or a.fld3<>b.fld3 * fld1/fld2/fld3がNOT NULLのときです、念のため