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

SQLite使用周期重新编号ID

方砚
2023-03-14
问题内容

您好,我有很多插入行的表。我需要按编号对所有行进行重新编号并对其进行排序。

我找到了此代码,但对我不起作用。

SET @i = 100;
UPDATE "main"."Categories" SET ID = (@i := @i +1) WHERE "Name" = "White";
ALTER TABLE "main"."Categories" AUTO_INCREMENT = 1

因此,使用上述代码,我希望对所有具有名称的记录重新编号-
白色,并从100开始以增量1插入它们。但这对我不起作用。也许我的代码有问题,但是SQL和SQLite查询之间有区别。

这是我创建表格的方式:

CREATE TABLE Categories (id INTEGER PRIMARY KEY, Name TEXT, Free NUMERIC)

我希望已经有了解决方案,因为我不想手动进行:)


问题答案:

该代码不是标准的SQL。

SQLite没有许多编程结构,因为它被设计为嵌入式数据库,在该数据库中使用宿主语言编写逻辑更为自然。

如果要在SQL中执行此操作,请尝试以下操作:
首先,创建一个临时表,以便我们有一个可用于计数的自动增量列:

CREATE TEMPORARY TABLE new_ids(i INTEGER PRIMARY KEY, old_id INTEGER);

插入一个虚拟记录,以确保下一个新记录从处开始100,然后插入Categories要更改的表的所有ID :

INSERT INTO new_ids VALUES(99, NULL);
INSERT INTO new_ids SELECT NULL, id FROM "Categories" WHERE "Name" = 'White';
DELETE FROM new_ids WHERE i = 99;

然后,我们可以更改原始表中的所有这些ID:

UPDATE "Categories"
  SET id = (SELECT i FROM new_ids WHERE old_id = "Categories".id)
  WHERE id IN (SELECT old_id FROM new_ids);
DROP TABLE new_ids;


 类似资料:
  • 问题内容: 如何重置sql表上的主键计数器并用新的主键更新每一行? 问题答案: 我将首先在表中添加另一列,并使用新的PK填充该列。 然后,我将使用update语句来更新所有相关表中的新fk字段。 然后,您可以删除旧的PK和旧的fk字段。 编辑: 是的,正如伊恩所说,您将必须删除然后重新创建所有外键约束。

  • 问题内容: 我有一个ISO 8601年和周的编号,我需要将此值转换为该周(星期一)的第一天的日期。我怎样才能做到这一点? datetime.strptime()同时使用和指令,但都不遵守datetime.isocalendar()使用的ISO 8601工作日规则。 更新: Python的3.6支持的,并指令也存在于libc中,使这一个班轮: 更新2 :Python 3.8添加了该方法,该方法更加直

  • 大家好。我用ApachePOI3.7创建了一个spreadshhet。电子表格的前两行显示标题信息。然后从第3行开始,返回的数据填充到电子表格中。我的问题是,有一种方法可以从第3行开始对行进行编号。例如,我希望spreadshhet的第三行声明“1”而不是“3”。 1处理日期:2013年7月30日13:39

  • 问题内容: 我正试图用sqlite获取本周的数据,但由于我得到了错误的信息,似乎我错过了一些东西。更具体地说,我想检索数据库中具有时间戳记的所有数据,该时间戳记的日期在本周。这周可能从星期日或星期一开始,即26/2 / 12-03 / 03/12。目前,我正在使用这样的东西: 问题答案: 我认为您应该非常接近。如果您希望自本周开始以来拥有所有东西,只需稍作修改:

  • 我有一个表,它有一个主键ID列,并设置为每个新条目的增量为1,这是一个相当标准的配置。此表定期更新新记录,每月归档一次到存档表,然后截断。 我的问题不是关于重新播种列(使用DBCC--我知道如何这样做),而是关于如何使用新的ID值重新对现有记录进行编号。我应该使用循环的动态SQL查询(删除记录、插入记录)来执行此操作吗?还是有一些我不知道的SQL Server函数可以自动重新编号ID列?

  • 问题内容: 我有一个简单的MySQL表,并且主索引(id)并未一一编号(1、31、35、100等)。我希望它们被编号为(1、2、3、4)。请告诉我该怎么做。我还要指出,我知道该操作可能造成的后果,但我只是想整理一下桌子。 问题答案: 我同意其他方法也可以,但是我只是给出了一个不同的想法。这将不需要任何临时表创建要求: