Mysqlで1つのテーブルを別のテーブルの値でUPDATEするやり方
Mysqlで1つのテーブルの値を別のテーブルの値と同じ値に合わせたいときのSQLを紹介します。
例えば以下の、テーブルAをテーブルBの値で更新します。
- テーブルA (table_a)
| ID(id) | 名前(name) | 誕生日(birthday) |
| 1 | 山田 | 1988-10-01 |
| 2 | 佐藤 | 1988-12-01 |
| 3 | 田中 | 1989-01-01 |
- テーブルB (table_b)
| ID(id) | 名前(name) | 誕生日(birthday) | 新ID(new_id) |
| 1 | 山田 | 1989-10-01 | 1 |
| 2 | 佐藤 | 1989-12-01 | 3 |
| 3 | 田中 | 1990-01-01 | 4 |
table_aのbirthdaryをtable_bのbirthdayで更新したい場合、以下のSQLを実行します。
(idとnameが一致するもの同士で紐づけて、table_aのbirthdayを更新する)

- Example
UPDATE
table_a a,
table_b b
SET
a.birthday = b.birthday
WHERE
a.id = b.id
AND a.name = b.name
Mysqlで他テーブルを条件指定して,他方のテーブルをUPDATEするやり方
上のtable_aに対し、id=2の佐藤さんのみtable_bの値で更新したい場合
UPDATE
table_a a,
(
SELECT
id,
name,
birthday
FROM
table_b
WHERE
id = 2
) AS b
SET
a.birthday = b.birthday
WHERE
a.id = b.id
AND a.name = b.name
Mysqlで1つのテーブルの値を結合した別のテーブルの値で更新するやり方
- テーブルC (table_c)
| 新ID(new_id) | 誕生日(birthday) |
| 3 | 1991-10-01 |
| 4 | 1992-10-01 |
次にテーブルBの新ID、テーブルCの新IDを紐づけて、テーブルCのbirthdayでテーブルAのbirtydayを更新するSQLを紹介します。

- Example(Inner Joinで紐づける)
UPDATE
table_a a,
(
SELECT
b.id,
b.name,
c.birthday
FROM
table_b b
INNER JOIN table_c c ON b.new_id = c.new_id
) AS w_table
SET
a.birthday = w_table.birthday
WHERE
a.id = w_table.id
AND a.name = w_table.name