как можно обновить таблицу в регистре на postgresql - PullRequest
0 голосов
/ 04 августа 2020

Я успешно запустил SQL -Server. Что-то вроде того, что показано ниже.

With cte As
(
    SELECT FolderNo,Sort,
    ROW_NUMBER() OVER (ORDER BY COALESCE(Sort,0) ASC, DateModified ASC) AS RN
    FROM MyTable where ParentNo = 1 AND IsDeleted = false
)
--select * from cte
UPDATE cte SET Sort=RN;

Но в postgresql это дает мне ошибку

отношение "cte" не существует

Как можно в postgresql?

1 Ответ

1 голос
/ 04 августа 2020

Вы не можете обновить результат CTE в Postgres. Вам необходимо присоединиться к запросу:

update mytable
  set sort = t.rn
from (  
    SELECT FolderNo,
           ROW_NUMBER() OVER (ORDER BY sort nulls first ASC, DateModified ASC) AS RN
    FROM MyTable 
    where ParentNo = 1 
      AND IsDeleted = false
) t
where t.folderno = mytable.folderno      

Предполагается, что folderno является первичным ключом таблицы (или, по крайней мере, уникальным)

...