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
。