Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于另一列更新列';s值_Sql_Postgresql - Fatal编程技术网

Sql 基于另一列更新列';s值

Sql 基于另一列更新列';s值,sql,postgresql,Sql,Postgresql,如何更新如下结构的表: 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 为了实现这一结果:

如何更新如下结构的表:

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
为了实现这一结果:

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
我在考虑如何混合

SELECT DISTINCT parent_id FROM cats AS t;


虽然我对博士后没有真正的经验,也不知道如何使用某种形式的FOREACH。非常感谢您对我使用排号功能的帮助

select parent_id, 
row_number() over (partition by parent_id order by parent_id) as position_id from table

使用行数函数

select parent_id, 
row_number() over (partition by parent_id order by parent_id) as position_id from table

使用行数函数

select parent_id, 
row_number() over (partition by parent_id order by parent_id) as position_id from table

使用行数函数

select parent_id, 
row_number() over (partition by parent_id order by parent_id) as position_id from table

您可以使用
行数()
获取增量数。问题是如何将其分配给特定行。下面是一个使用
连接的方法:

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;

您可以使用
行数()
获取增量数。问题是如何将其分配给特定行。下面是一个使用
连接的方法:

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;

您可以使用
行数()
获取增量数。问题是如何将其分配给特定行。下面是一个使用
连接的方法:

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;

您可以使用
行数()
获取增量数。问题是如何将其分配给特定行。下面是一个使用
连接的方法:

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;
试试这个:

    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;
试试这个:

    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;
试试这个:

    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;
试试这个:

    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;


这几乎成功了,尽管它只显示了想要的结果。如何将表更新为这些值?我会说,与其更新表,不如创建一个包含此代码的视图,并使用几乎成功的视图,尽管它只显示所需的结果。如何将表更新为这些值?我会说,与其更新表,不如创建一个包含此代码的视图,并使用几乎成功的视图,尽管它只显示所需的结果。如何将表更新为这些值?我会说,与其更新表,不如创建一个包含此代码的视图,并使用几乎成功的视图,尽管它只显示所需的结果。如何将表更新为这些值?我会说,与其更新表,不如创建一个包含此代码的视图并使用该视图。您是否有该表的主键?@User2012384我有,该表实际上有许多列,我只是简化了我的问题。我现在更新了。你有那个表的主键吗?@User2012384我有,这个表实际上有很多列,我只是简化了我的问题。我现在更新了。你有那个表的主键吗?@User2012384我有,这个表实际上有很多列,我只是简化了我的问题。我现在更新了。你有那个表的主键吗?@User2012384我有,这个表实际上有很多列,我只是简化了我的问题。我现在更新了它。这对我来说真的很有用(你在c2.ctid=c_ctid之后漏掉了一个逗号),谢谢@春天爱好者。不知何故,我也错过了
,这对我来说真的很有用(你在c2.ctid=c_ctid之后错过了一个逗号),谢谢@春天爱好者。不知何故,我也错过了
,这对我来说真的很有用(你在c2.ctid=c_ctid之后错过了一个逗号),谢谢@春天爱好者。不知何故,我也错过了
,这对我来说真的很有用(你在c2.ctid=c_ctid之后错过了一个逗号),谢谢@春天爱好者。不知何故,我也错过了
as