mysql使用CASE语句更新多个行,每个行都有自己的值

时间:2010-09-03 21:01:59

标签: mysql

我正在尝试一次更新几行中的两个字段但我无法确定正确的语法,除非通过一次字段更新执行此操作。

每一行都由一个id标识,因此我使用的是CASE语句。

我有这张桌子:

  

tbl_accounts(id_account,nation_id,   GROUP_ID)



现在,以下查询用于更新仅一个字段

UPDATE tbl_accounts SET nation_id = CASE id_account
WHEN 3 THEN 333
WHEN 5 THEN 555
ELSE nation_id END

以上内容将更新由其id_account标识的每个相应行的nation_id字段。



以下查询不起作用用于更新两个字段 - 请建议修复语法。我正在尝试避免使用任何SELECT / JOIN / etc'

UPDATE tbl_accounts SET nation_id = CASE id_account, group_id = CASE id_account
WHEN 3 THEN 3331, 3332
WHEN 5 THEN 5551, 5552
ELSE nation_id, group_id END



我可以将它作为两个单独的语句运行,但我确信有一种方法可以将两者合并为一个。

任何帮助都非常有用!

1 个答案:

答案 0 :(得分:4)

听起来你正在寻找这样的东西:

UPDATE tbl_accounts
SET nation_id =
     CASE id_account
     WHEN 3 THEN 3331
     WHEN 5 THEN 5551
     ELSE nation_id
     END,
group_id =
     CASE id_account
     WHEN 3 THEN 3332
     WHEN 5 THEN 5552
     ELSE group_id
     END

但在这种情况下,单独更新是一个明智的解决方案。上面的查询将需要检查表中的每一行以查看它是否与条件匹配。如果你有一个关于id_account的索引(并且可能你看起来像是主键),那么更新单行会非常快。

UPDATE tbl_accounts SET nation_id = 3331, groupid = 3332 WHERE id_account = 3
UPDATE tbl_accounts SET nation_id = 5551, groupid = 5552 WHERE id_account = 5