我在PostgreSQL中有一个表,该表具有应该是唯一的ID列。但是,当前许多行(大约300万行)的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分配给新引入的字段一个递增编号? 有哪些可用的选项,最有效的方法是什么? 问题答案: 您是否正在寻找这样的