我有一个表items
,其中有一个priority
列,它只是一个整数。在尝试执行一些批量操作时,我试图将priority
重置为连续数字。
我已经能够使用ROW_NUMBER()
成功地生成具有我想要的新priority
值的表。现在,我只需要将来自该SELECT
查询的值放入实际items
表中的匹配记录中即可。
我尝试过这样的事情:
UPDATE
"items"
SET
"priority" = tempTable.newPriority
FROM
(
SELECT
ROW_NUMBER() OVER (
ORDER BY
/* pile of sort conditions here */
) AS "newPriority"
FROM
"items"
) AS tempTable
WHERE
"items"."id" = "tempTable"."id"
;
我不断收到“靠近FROM”的语法错误。
如何在此处更正语法?
答案 0 :(得分:1)
SQLite 不如其他rdbms灵活,它甚至不支持update
语句中的联接。
相反,您可以执行以下操作:
update items
set priority = 1 + (
select count(*)
from items i
where i.id < items.id
)
这样,条件仅由id
派生。
因此,priority
列将填充序号1, 2, 3, ....
如果您可以通过这种方式应用堆排序条件,则可以进行更新。
编辑。
尽管我不确定它的效率,但是像这样的事情也许可以满足您的需求:
UPDATE items
SET priority = (
SELECT newPriority FROM (
SELECT id, ROW_NUMBER() OVER (ORDER BY /* pile of sort conditions here */) AS newPriority
FROM items
) AS tempTable
WHERE tempTable.id = items.id
)
答案 1 :(得分:0)
事实证明,此特定问题的根本答案是SQLite不支持UPDATE ... FROM
。因此,需要一些替代方法。