首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一列的值更新列

根据另一列的值更新列
EN

Stack Overflow用户
提问于 2015-07-14 11:02:03
回答 3查看 41关注 0票数 0

如何更新结构如下的表:

代码语言:javascript
复制
id[pkey] | parent_id  | position
1           1           
2           1
3           1
4           1
5           1

6           2
7           2
8           2
9           2

10          3
11          3
12          3

...and so on

为实现这一结果:

代码语言:javascript
复制
id[pkey] | parent_id  | position       
1           1               1
2           1               2
3           1               3
4           1               4
5           1               5

6           2               1
7           2               2
8           2               3
9           2               4

10          3               1
11          3               2
12          3               3

...and so on

我在想如何混合

代码语言:javascript
复制
SELECT DISTINCT parent_id FROM cats AS t;

使用

代码语言:javascript
复制
CREATE SEQUENCE dpos;
UPDATE cats t1 SET position = nextval('dpos') WHERE t.parent_id = t1.parent_id;
DROP SEQUENCE dpos;

虽然我对postgres没有真正的经验,也不知道如何使用某种FOREACH。我很感谢你的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-14 11:20:13

您可以使用row_number()获得增量数字。问题是如何将其分配给特定的行。下面是使用join的一种方法

代码语言:javascript
复制
update cats
    set position = c2.newpos
    from (select c2.*, c2.ctid as c_ctid,
                 row_number() over (partition by c2.parent_id order by NULL) as seqnum
          from cats c2
         ) c2
    where cats.parent_id = c2.parent_id and cats.ctid = c2.c_ctid;
票数 1
EN

Stack Overflow用户

发布于 2015-07-14 11:11:18

使用row_number函数

代码语言:javascript
复制
select parent_id, 
row_number() over (partition by parent_id order by parent_id) as position_id from table
票数 1
EN

Stack Overflow用户

发布于 2015-07-14 11:32:51

试试这个:

代码语言:javascript
复制
    UPDATE table_name set table_name.dataID = v_table_name.rn
FROM  
(
    SELECT row_number() over (partition by your_primaryKey order by your_primaryKey) AS rn, id
    FROM table_name
) AS v_table_name
WHERE v_table_name.your_primaryKey = v_table_name.your_primaryKey;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31404766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档