2012/05/31

同一テーブル内の違うフィールドにデータをコピーする

あるテーブルに新しくフィールドを追加した場合などで、すでにある同じ行のあるフィールドのデータをそのままコピーしたい場合のSQL。

たとえば、TABLE_A に次のようにデータが入っているとする。

| Field1 | Field2 | Field3 | | 001 | abcd | 22 | | 001 | dnkda | 34 | | 001 | tsgt | 9 | | 001 | lanhp | 13 |

このテーブルに 'Field4' というフィールドを追加してそのフィールドに次のように 'Field3' の値をコピーしたいときの処理にすこし手間取ったのでメモしておく。

| Field1 | Field2 | Field3 | Field4 | | 001 | abcd | 22 | 22 | | 001 | dnkda | 34 | 34 | | 001 | tsgt | 9 | 9 | | 001 | lanhp | 13 | 13 |

まず、'Field4' の初期値を決めて、すべての列に初期値を入れておく。今回の場合 '0' をセット。

| Field1 | Field2 | Field3 | Field4 | | 001 | abcd | 22 | 0 | | 001 | dnkda | 34 | 0 | | 001 | tsgt | 9 | 0 | | 001 | lanhp | 13 | 0 |

この状態の TABLE_A にたいして以下のSQL文を実行することで解決。

update TABLE_A set Field4 = Field3 where Field4 = 0



単純なのに、案外てこずってしまった。。