У меня есть следующая таблица:Обновление с помощью row_number() не работает, почему?
CREATE TABLE t_overview
(
obj_uid uuid,
obj_parent_uid uuid,
obj_no integer,
obj_text text,
obj_path text,
isdir integer,
intid bigint,
intparentid bigint
)
Я хочу, чтобы перейти от uuid
к bigint
и создали новые столбцы intid
и intparentid
. Мне нужно уникальное целое число (obj_uid
является основным ключом) для intid
, поэтому я просто хотел обновить row_number() over (order by ...)
.
Не работает. Поэтому я попытался записать результаты в таблицу temp и обновить через join. Но я получил 1
за каждые intid
.
Но когда я выбираю из соединения, где я делаю обновление, я получаю 1, 2, 3, 4, 5, 6 и т. Д. Что мне не хватает?
DROP TABLE IF EXISTS mytable;
CREATE TEMP TABLE mytable AS
WITH CTE AS
(
SELECT obj_uid, obj_parent_uid, obj_no
, obj_text, obj_path, isdir
, intid as cteIntId
, intparentid as cteParentId
, row_number() over (order by obj_uid) as rn
FROM T_Overview
)
SELECT * FROM CTE;
UPDATE T_Overview SET intid = mytable.rn
FROM T_Overview AS bt
INNER JOIN mytable
ON mytable.obj_uid = bt.obj_uid
-- UPDATE T_Overview SET intid = CTE.rn FROM CTE;
-- UPDATE T_Overview SET intparentid = CTE.intid FROM CTE;
'obj_parent_uid' является самоналожением (ссылка на' t_overview'), правильно? –
@ Erwin Brandstetter: Правильно –