3

您好,我有许多插入行的表。我需要按 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)

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

4

1 回答 1

2

该代码不是标准 SQL。

SQLite 没有很多编程结构,因为它被设计成一个嵌入式数据库,在其中使用宿主语言更自然地具有逻辑。

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

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

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

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;
于 2013-08-19T07:34:28.410 回答