裏紙に書く程度の内容

JOINを使用したUPDATE文の書き方【MySQL】

MySQLのupdateで別テーブルのデータを条件にする場合の書き方についてです。

書式

まずは結論から。 書き方はこんな感じ。

update テーブルA
left join テーブルB on 結合条件
set カラム名 = 値
where 更新条件

left joinの例ですが、inner join等でも書き方は同様です。

具体例

下記のようなテーブルを想定します。

users テーブル

id name group
1 Johon
2 Suzuki
3 Alice
4 Satou
5 Tanaka

scores テーブル

id test_name user_id score
1 testA 1 76
2 testA 2 82
3 testA 3 66
4 testA 4 98
5 testA 5 55
6 testA 6 43

usersscoresusers.id = scores.user_idで紐づくものとします。

ここで、scores.scoreが 80 以上のユーザの、users.group を “A” に更新します。

usersテーブルを更新したいけど条件はgroupsテーブルにある、という状況です。

これは下記のようなSQLで更新可能です。

update users
inner join scores on users.id = scores.user_id
set `group` = "A"
where scores.score >= 80

今更ですがカラム名にgroupでよくない例ですね。試される場合は別の名前にすることをおススメします。

テーブル作成クエリ

今回使用したテーブルの作成クエリです。必要に応じてご利用ください。

create table users (
id int primary key auto_increment,
name varchar(255) default null,
`group` varchar(10) default null
);

insert into users values 
(null, "Johon", null),
(null, "Suzuki", null),
(null, "Alice", null),
(null, "Satou", null),
(null, "Tanaka", null);

create table scores (
id int primary key auto_increment,
test_name varchar(255) default null,
user_id int not null,
score int not null
);

insert into scores values
(null, "testA", 1, 76),
(null, "testA", 2, 82),
(null, "testA", 3, 66),
(null, "testA", 4, 98),
(null, "testA", 5, 55);

JOINを使ったDELETE文についてはこちら

Index