从关联数组更新sql批量

时间:2017-03-13 09:07:56

标签: mysql sql

我想更新表并根据不同的值使用不同的更新值:

[
"2" => "7",
"5" => "23"
]

上面的数据应该导致所有具有columnA = 2的行更新columnB = 7,将rowA = 5的行更新为columnB = 23。

我可以在一个查询中执行此操作,还是需要使用单独的更新查询?

1 个答案:

答案 0 :(得分:2)

针对您的具体案例的最佳解决方案是:它快速且可读:

UPDATE MyTable
SET
    columnB =
        CASE columnA 
            WHEN 2 THEN 7
            WHEN 5 THEN 23
        END
WHERE columnA IN (2, 5)

此外,您可以在没有WHERE的情况下操作。但是对于大表来说它可能效果较差,因为columnB会在每一行中重新分配{&1;}。 columnA NOT IN (2, 5)

中的当前值
UPDATE MyTable
SET
    columnB =
        CASE columnA 
            WHEN 2 THEN 7
            WHEN 5 THEN 23
            ELSE columnB -- reassign the same value instead of using WHERE
        END

如果您的条件不是一列等于不同的值,请使用复杂的CASE表示法(条件直接位于WHEN之后):

UPDATE MyTable
SET
    ColumnB =
        CASE 
            WHEN columnA = 2 THEN 7
            WHEN columnA = 5 AND 1 = 1 THEN 23 -- FOR EXAMPLE
            ELSE ColumnB
        END

最后一个小小的笑话。 尝试一些数学运算(2 => 7,5 => 23):

UPDATE MyTable
SET columnA = (11 * columnB * columnB + 83 * columnB) / 30
WHERE columnA IN (2, 5)