你好我有很多插入行的表。我需要按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)
我希望已经有解决方法如何做,因为我不想手动执行:)
答案 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;