如何在psql中对一个范围内的列执行批量更新
How to perform batch update of a column within a range in psql
这是我的 table 结构:
Table name:Items
--------------------------------
id | category_id | code |
--------------------------------
1 | 1 | 15156 |
2 | 1 | 15157 |
2 | 1 | 15158 |
2 | 1 | 15159 |
2 | 1 | 15160 |
2 | 1 | 15161 |
这里的code字段是唯一的,类型是string。我需要将代码字段值增加 +1(代码字段是字符串)。
你可以试试
Item.update_all(code: "#{code.to_i + 1}")
如果你想阅读update_all
update_all
将不起作用,因为记录属性不可用。
更好的可能是...
minimum = "15157"
maximum = "15160"
Item.where("code >= ? AND code <= ?", minimum, maximum).each{|i| i.update_attribute(:code, "#{i.code.to_i + 1}") }
(编辑以反映传递给 update_attribute
的两个参数)
已编辑以反映@rustamagasanov 将代码值限制在给定范围内的建议...
这是我的 table 结构:
Table name:Items
--------------------------------
id | category_id | code |
--------------------------------
1 | 1 | 15156 |
2 | 1 | 15157 |
2 | 1 | 15158 |
2 | 1 | 15159 |
2 | 1 | 15160 |
2 | 1 | 15161 |
这里的code字段是唯一的,类型是string。我需要将代码字段值增加 +1(代码字段是字符串)。
你可以试试
Item.update_all(code: "#{code.to_i + 1}")
如果你想阅读update_all
update_all
将不起作用,因为记录属性不可用。
更好的可能是...
minimum = "15157"
maximum = "15160"
Item.where("code >= ? AND code <= ?", minimum, maximum).each{|i| i.update_attribute(:code, "#{i.code.to_i + 1}") }
(编辑以反映传递给 update_attribute
的两个参数)
已编辑以反映@rustamagasanov 将代码值限制在给定范围内的建议...