繁体   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