我有如下表:更新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 ...)
。
似乎沒有工作。所以我嘗試將結果寫入臨時表,並通過連接進行更新。但我每intid
得到1
。
但是,當我從更新的連接中選擇,我得到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'本身),對吧? – 2015-03-02 08:29:38
@Erwin Brandstetter:正確 – 2015-03-02 16:49:10