SQLite使用循环重新编号ID

时间:2013-08-18 17:29:10

标签: sql sqlite

你好我有很多插入行的表。我需要按ID对所有行重新编号并对它们进行排序。

我找到了这段代码,但它对我不起作用。

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)

我希望已经有解决方法如何做,因为我不想手动执行:)

1 个答案:

答案 0 :(得分:1)

该代码不是标准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;