gpt4 book ai didi

mysql - 带有 CASE 和 WHEN 的 Ruby update_all

转载 作者:数据小太阳 更新时间:2023-10-29 09:03:27 27 4
gpt4 key购买 nike

是否可以使用 ActiveRecord 的 update_all 函数来创建一个 MySQL 查询:

UPDATE `key_value_store`
SET `key` =
CASE `key`
WHEN 'xxxxxxx' THEN 'yyyyyyyy'
WHEN 'zzzzzzz' THEN 'wwwwwwww'
...
END
WHERE `key` IN ('some key', 'some other key', ...)
LIMIT 1000

我现在拥有的是

keys = ['some key', 'some other key', ...]
Keyvaluemodel.where(:key => keys).limit(1000).update_all()

所以真正的问题是,什么代码放在 update_all 括号中以便此更新按照我想要的方式工作?

最佳答案

除非您编写一些原始 SQL 或自定义查询,否则这是不可能的。但考虑到您只有两种情况,编写两个查询就足够容易了。

如果you look at the docs您会看到 update_all 接受的唯一参数是 SQL 查询的 SET 部分。

updates - A string, array, or hash representing the SET part of an SQL statement.

因此,要么编写自定义查询,要么将更新拆分为多个查询,每个查询对应一个 CASE

Model.where(key: key_1).limit(1000).update_all(key: new_key)
Model.where(key: key_2).limit(1000).update_all(key: new_key)

关于mysql - 带有 CASE 和 WHEN 的 Ruby update_all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29673851/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com