MySQL:如果值等于,则更新多个列

时间:2016-01-09 19:34:24

标签: mysql sql sql-update

我想知道是否存在更新某些列的“短路”(单一查询),如果它们的值等于整数。

假设我的表看起来像这样:

+------------+----+----+----+----+
| customerID | v0 | v1 | v2 | v3 |
+------------+----+----+----+----+
|          1 |  3 |  3 |  2 |  1 |
+------------+----+----+----+----+

我想将整数3的所有值(customerID除外)设置为0 - 因此查询将更新列v0v1

2 个答案:

答案 0 :(得分:1)

您可以使用一堆case语句执行此操作:

UPDATE my_table
SET    v0 = CASE v0 WHEN 3 THEN 0 ELSE v0 END,
       v1 = CASE v1 WHEN 3 THEN 0 ELSE v1 END,
       v2 = CASE v2 WHEN 3 THEN 0 ELSE v2 END,
       v3 = CASE v3 WHEN 3 THEN 0 ELSE v3 END
WHERE  3 IN (v0, v1, v2, v3)

答案 1 :(得分:1)

Mureinik,已经提到过一种有用的方法,另一种方法是使用 If 语句

Update my_table
set v0= If(v0=3,0,v0),
    v1= If(v1=3,0,v1),
    v2= If(v2=3,0,v2),
    v3= If(v3=3,0,v3)
where 3 In (v0, v1, v2, v3)

这是DEMO