我有下表的简化版本。每行都有一个按其parent_id 分区的item_order 值。
假设我想将“mice”的“item_order”值设置为 1。
UPDATE
my_table
SET
item_order = 1
WHERE item_id = 612;
我需要更新表格如下。 (突出显示了预期的更改。)
如何更新同一 Parent_id 内所有受影响行的 item_order 值?
最佳答案
您可以通过更新从要移动的 item_id 获取 item_order 来完成此操作。
只有低于已更改订单的订单也需要移动。
UPDATE my_table t SET item_order = case when t.item_order = t2.item_order then 1 when t.item_order < t2.item_order then t.item_order + 1 else t.item_order end FROM my_table t2 WHERE t.parent_id = t2.parent_id AND t.item_order <= t2.item_order AND t2.item_id = 612;
3 rows affected
select * from my_table order by parent_id, item_order
db<>fiddle 上的演示 here
关于sql - 在 PostgreSQL 上使用特定值更新所有受影响的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70632674/