gpt4 book ai didi

PostgreSql:如何从数组更新表?

转载 作者:行者123 更新时间:2023-11-29 12:10:20 28 4
gpt4 key购买 nike

如何从数组更新表字段以避免使用临时表?用户将数组传递给重新排序表。

create TABLE items
(
id serial primary key,
name text,
select_order int
)

insert into items(name, select_order)
values
('cucumber',0),
('milk',1),
('coffee',2),
('water',3)

select * from items order by select_order;

DO
$body$
DECLARE var_array int[]:='{3,0,2,1}';
BEGIN
update items ??

END;
$body$

这个例子的最终结果应该是

select * from items order by select_order;
name select_order
------------------------
water 0
cucumber 1
coffee 2
milk 3

最佳答案

假设数组中的索引对应于 select_order 中的值,以下查询将返回新值和旧值:

select i.id, i.select_order, t.new_sort
from items i
join lateral unnest(array[3,0,2,1]) with ordinality as t(new_sort, idx) on t.idx - 1 = i.select_order

现在这可以用来更新目标表:

update items
set select_order = r.new_sort
from (
select i.id, i.select_order, t.new_sort
from items i
join lateral unnest(array[3,0,2,1]) with ordinality as t(new_sort, idx) on t.idx - 1 = i.select_order
) r
where r.id = items.id;

这还假设 select_order0 开始并且没有间隙。

关于PostgreSql:如何从数组更新表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39343217/

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