【问题标题】:Generate sequence numbers on PostgreSQL integer column在 PostgreSQL 整数列上生成序列号
【发布时间】:2015-06-22 11:15:46
【问题描述】:

我在 PostgreSQL 上有一张表,里面有 1000 行。我的表中有一个整数列是空的。我想用顺序的、唯一的数字填充newid,有点像主键。

Product
-------------------------
id  name  newid  size
60   ....  null   L
72   ....  null   M
83   ....  null   xl
84   ....  null   S
85   ...

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

Product
-------------------------
id  name  newid  size
60   ....  1      L
72   ....  2      M
83   ....  3      xl
84   ....  4      S
85   ...

【问题讨论】:

  • 请详细说明。目前尚不清楚您要做什么。样本数据和期望的结果可能会有很大帮助。
  • id列有什么问题?
  • newid 列将生成新的整数值。
  • 您在寻找ROW_NUMBER() 吗?
  • 为什么值 L 应该得到数字 1 而值 M 应该得到数字 2?

标签: sql postgresql


【解决方案1】:

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

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);

【讨论】:

    【解决方案2】:

    怎么样:

    update mytable set
    newid = id + 1000000
    

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多