簡體   English   中英

UPDATE…FROM帶有子查詢的語法

[英]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 因此,需要一些替代方法。

https://www.sqlite.org/lang_update.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM