当前位置: 首页 > 面试题库 >

如何用递增的值更新

丌官寒
2023-03-14
问题内容

我在PostgreSQL中有一个表,该表具有应该是唯一的ID列。但是,当前许多行(大约300万行)的ID为“ 1”。

我知道的:

  • 总行数
  • ID列的当前最大值
  • ID(不正确)为“ 1”的行数

我需要的是一个查询,该查询将提取ID为“
1”的所有行,并为其分配一个新ID,该ID自动递增,以便表中的每一行都具有唯一的ID。我希望它从开始,currentMaxId + 1并为每行分配后续ID。

这是我得到的最接近的查询:

UPDATE table_name
SET id = (
    SELECT max(id) FROM table_name
) + 1
WHERE id = '1'

问题是内部SELECT仅在第一次运行,因此将有问题的行的ID设置为原始行max(id) + 1,而不是max(id) + 1每次都设置为新行,这给了我我要解决的相同问题。
任何有关如何调整此查询以达到我想要的结果或替代方法的建议,将不胜感激!


问题答案:

您可以按临时顺序逐步进行操作。

1)创作

create temporary sequence seq_upd;

2)将其设置为适当的初始值

select setval('seq_upd', (select max(id) from table_name));

3)更新

update table_name set id=nextval('seq_upd') where id=1;


 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: 是否可以使用单个UPDATE SQL语句执行多个更新? 我正在更新具有特定列的一些新值的表,如下所示,所以我在prepayId指示的某些流量上更新了表Prepay,列PrepayTransactionDesc 它工作正常,但我想进行多次更新。我尝试了几种不同的方法,但是失败了。那是我试图做到的,时不时地使用CASE。 例如,我有

  • 问题内容: 我现在正在一家公司中使用全球DBA的无限智慧,他创建了一个表,该表将一个int用作ID字段,但是不会自动递增该数字。 我要从.Net传递一个表值参数,因为它随时有大约100或更多行的数据正在传递,并且我不想杀死该应用程序,破坏网络或SQL Server。 这是我的存储过程 我希望这会为我带来一些帮助,就像我对此进行测试时一样 这就是我回来的 (影响1行) (影响1行) (影响1行) (

  • 问题内容: 如何更新字段以增加现有价值? 例如我有 表名: 有没有一种方法可以简单地为信用增加价值? 喜欢 我想将7加到4,以便credit = 11,其中id =‘1’ ,该怎么做? 问题答案:

  • 问题内容: 我正在使用单个插入语句将一批记录添加到表中。我希望为每个新批次分配递增的数字,但每次都从1开始。 所以,如果我有 然后我添加两条记录(使用单个插入语句): 我如何对该表运行更新语句,以便Dave将被设置为1,而Paul将被设置为2。我不想使用游标。 问题答案: 排名功能应该可以满足您的需求。您没有提及有关如何分配序列号的任何特定规则,因此我在这里使用了名称:

  • 问题内容: 如何更新字段以为现有价值增加价值? 例如我有 表名: 有没有一种方法可以简单地为信用增加价值? 喜欢 我想将7加到4,以便credit = 11,其中id =‘1’ ,该怎么做? 问题答案:

  • 问题内容: 我的一个数据库中有一个名为“ textile_events”的表。 昨天,“ seq_no”字段被引入到上表中。 现在,对于所有付费字段等于“已付费”的“平头”事件,我需要为“ seq_no”字段分配一个递增编号。 换句话说,我正在寻找这样的东西, 如何仅将满足特定条件的Recod分配给新引入的字段一个递增编号? 有哪些可用的选项,最有效的方法是什么? 问题答案: 您是否正在寻找这样的