[英]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.