2012/06/01

SQL 別のテーブルからフィールドの値をコピーしてUPDATEする

別のテーブルからフィールドの値をコピーしてそのテーブルのすべての行を一括でUPDATEしたいときのSQL文。

たとえば、以下のように TABLE_MEMBERDATA(なにかしらのメンバー表) と TABLE_PHONE_NUM (それぞれのメンバーの電話番号の表)にデータが格納されているとする。

TABLE_MEMBERDATA:
| ID | NAME | New_Field | | 001 | aaa | null | | 002 | bbb | null | | 003 | ccc | null | | 004 | ddd | null | ..... .....

TABLE_PHONE_NUM :
| NAME | PHONE_NUM | | aaa | 080-AAAA-YYYY | | bbb | 080-BBBB-YYYY | | ccc | 080-CCCC-YYYY | | ddd | 080-DDDD-YYYY | ..... .....

ここで、TABLE_MEMBERDATAに新しいフィールド 'New_Field ' を追加してそこにそれぞれの'NAME'に対応する電話番号を一括でコピーして以下のような状態にしたい。

TABLE_MEMBERDATA:
| ID | NAME | New_Field | | 001 | aaa | 080-AAAA-YYYY | | 001 | bbb | 080-BBBB-YYYY | | 001 | ccc | 080-CCCC-YYYY | | 001 | ddd | 080-DDDD-YYYY | ..... .....

このときは以下のようにUPDATEすればすべての行を一括で更新できる。

update TABLE_MEMBERDATA
set New_Field =
(select PHONE_NUM from TABLE_PHONE_NUM
where TABLE_PHONE_NUM.NAME = TABLE_MEMBERDATA.NAME)