MYSQL UPDATE SET在同一列上但具有多个WHERE子句

Mon*_*nty 10 mysql

使用MYSQL我正在使用此查询:

UPDATE CustomerDetails_COPY
SET Category_ID = 10
WHERE Category_ID = 2
Run Code Online (Sandbox Code Playgroud)

这很好,但我想要更多15+以上SET/WHERE:

UPDATE CustomerDetails_COPY
SET Category_ID = 9  WHERE Category_ID = 3
SET Category_ID = 12 WHERE Category_ID = 4
SET Category_ID = 11 WHERE Category_ID = 5
.....
Run Code Online (Sandbox Code Playgroud)

我该如何添加?

编辑:

正如每个猎人的建议:

UPDATE CustomerDetails_COPY
    SET Category_ID = CASE Category_ID
        WHEN 2 THEN 10 
        WHEN 3 THEN 9
        WHEN 4 THEN 12
        WHEN 5 THEN 11
    END
WHERE Category_ID IN (2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

这很棒!谢谢

Hun*_*len 18

这样的事情对你有用:

UPDATE CustomerDetails_COPY
    SET Category_ID = CASE Category_ID
        WHEN 2 THEN 10 
        WHEN 3 THEN 9
        WHEN 4 THEN 12
        WHEN 5 THEN 11
    END
WHERE Category_ID IN (2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

或者,正如Simon建议的那样,您可以这样做以避免两次输入值:

UPDATE CustomerDetails_COPY
    SET Category_ID = CASE Category_ID
        WHEN 2 THEN 10 
        WHEN 3 THEN 9
        WHEN 4 THEN 12
        WHEN 5 THEN 11
        ELSE Category_ID
    END
Run Code Online (Sandbox Code Playgroud)

资料来源:http://www.karlrixon.co.uk/writing/update-multiple-rows-with-different-values-and-a-single-sql-query/

  • 删除了我的评论,尝试了这个并且工作,很好:)作为一个注释,你可以在"END"之前添加"ELSE Category_ID"如果你不想包括WHERE (2认同)
  • 使用`WHERE`子句,您几乎可以保证能够利用Category_ID上的索引,也可以使用[safe-updates](http://dev.mysql.com/doc/refman/5.0/en/mysql启用了-command-options.html#option_mysql_safe-updates),必须输入带有"UPDATE"的`WHERE`子句,因此`ELSE`子句可能不是最佳选择.坚持`WHERE`. (2认同)