web-dev-qa-db-ja.com

SQLの1つのクエリで複数の行の複数の列を更新する

私は1つのクエリで複数の行に複数の列を設定しようとしていますが、これまでのところ運はありません。

これが私のテーブルの様子です

表:ユーザー

enter image description here

User_id IN(3,4,5)に「ext_id」を設定し、ext_flag = Yとadmin_role = adminを同じ行に設定したいと思います。

結果のテーブルは次のようになります enter image description here

私のクエリはこのように見えますが、SQL構文に不慣れなためにエラーが発生しています。

update user
set ext_flag = 'Y', admin_role = 'admin', ext_id = 
case 
when user_id = 2 then 345
when user_id = 4 then 456
when user_id = 5 then 789
end

複数の列があるSET構文に苦労しています。

18
Pankaj Gadge

これを試して

 update user
 set ext_flag = 'Y', admin_role = 'admin', ext_id = 
 case 
 when user_id = 2 then 345
 when user_id = 4 then 456
 when user_id = 5 then 789
 end
 **WHERE user_id  in (2,4,5)**
30
echo_Me

挿入操作をハックすることもできます:

INSERT INTO mytable (id, a, b, c)
VALUES (1, 'a1', 'b1', 'c1'),
(2, 'a2', 'b2', 'c2'),
(3, 'a3', 'b3', 'c3'),
(4, 'a4', 'b4', 'c4'),
(5, 'a5', 'b5', 'c5'),
(6, 'a6', 'b6', 'c6')
ON DUPLICATE KEY UPDATE id=VALUES(id),
a=VALUES(a),
b=VALUES(b),
c=VALUES(c)
9