mysql - sql从关联数组批量更新

标签 mysql sql

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

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

上述数据应导致所有columnA = 2的行更新columnB = 7,并将columnA = 5的行更新为columnB = 23。

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

最佳答案

适合您的具体情况的最佳解决方案如下(快速且可读):

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

此外,您可以在没有 WHERE 的情况下进行操作。但对于大表来说,它的效果可能较差,因为 columnB 将在每行中重新分配其当前值,其中 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)

关于mysql - sql从关联数组批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42759881/

相关文章:

javascript - 成功提示消息不适用于 AJAX

mysql - 创建 View 的SQL语句

mysql - 如果只有一行匹配条件,则获取外键的所有行

SQL 组合列

php - 选择最大匹配的外键(组)

php - Sql 查询查找具有特定最后状态的订单

php - MYSQL 转储意外行

mysql - 存储航线成本的DB设计

mysql - 插入由多个选择生成的多行

php - 为什么 PHP 的下拉列表中 mysql 数据库的值没有设置为 "selected"