我正在尝试一次更新几行中的两个字段但我无法确定正确的语法,除非通过一次字段更新执行此操作。
每一行都由一个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
我可以将它作为两个单独的语句运行,但我确信有一种方法可以将两者合并为一个。
任何帮助都非常有用!
答案 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