我在Postgres表中有一个排序列,我试图在SQL中动态地重新排序该列。在MySQL中我只会运行此查询:
SET @new_ordering = 1;
UPDATE grados SET g_order = (@new_ordering := @new_ordering + 1) ORDER BY g_order ASC;
但当然,这并不适用于Postgres。如何在Postgres中使用新的递增值更新排序列时运行类似的东西?
答案 0 :(得分:2)
这可以使用Postgres中的窗口函数轻松完成:
update grados
set g_order = t.rn
from (
select pk_column,
row_number() over (order by g_order) as rn
from grados
) t
where t.pk_column = grados.pk_column;
您需要将pk_column
替换为真正的主键列才能获得正确的连接。
SQLFiddle:http://sqlfiddle.com/#!15/14a67/1