代码之家  ›  专栏  ›  技术社区  ›  Poni

mysql更新了多行,每行都有自己的值,并带有case语句

  •  2
  • Poni  · 技术社区  · 14 年前

    我正在尝试更新 两领域 一次处理好几行,但我不能确定正确的语法,除非使用一个字段更新。

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

    我有这张桌子:

    tbl_帐户(id_帐户,国家id, 群组ID



    现在, 以下查询有效 用于更新 只有一个领域 :

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

    以上内容将更新由其ID_帐户标识的每一行的国家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 回复  |  直到 11 年前
        1
  •  4
  •   Mark Byers    14 年前

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

    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_帐户上有一个索引(并且您可能会像它看起来是主键那样做),那么更新一行会非常快。

    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