[英]UPDATE … FROM syntax with sub-query
我有一个表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”的语法错误。
如何在这里更正语法?
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
)
事实证明,此特定问题的根本答案是SQLite不支持UPDATE ... FROM
。 因此,需要一些替代方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.