关于sql:在PostgreSQL整数列上生成序列号

Generate sequence numbers on PostgreSQL integer column

我在PostgreSQL上有一个表,其中有1000行。 我的表中有一个空列的整数列。 我想用连续的唯一数字填充newid,有点像主键。

1
2
3
4
5
6
7
8
Product
-------------------------
id  name  newid  SIZE
60   ....  NULL   L
72   ....  NULL   M
83   ....  NULL   xl
84   ....  NULL   S
85   ...

如何编写更新newid列的查询。

1
2
3
4
5
6
7
8
Product
-------------------------
id  name  newid  SIZE
60   ....  1      L
72   ....  2      M
83   ....  3      xl
84   ....  4      S
85   ...


您可以使用JOIN或子查询执行此操作。 我们的想法是使用row_number()计算新的id,然后将该值放入每一行:

1
2
3
4
5
6
WITH newvals (
      SELECT p.*, ROW_NUMBER() OVER (ORDER BY id) AS seqnum
      FROM product p
     )
UPDATE product p
    SET newid = (SELECT seqnum FROM newvals nv WHERE nv.id = p.id);

怎么样:

1
2
UPDATE mytable SET
newid = id + 1000000