从临时表更新多个值

时间:2020-08-15 23:29:36

标签: sql sqlite

我很困惑,因为当我在SQLite上运行此查询时。

在MacOS Mojave SQLITE上,“ FROM”上出现语法错误。没有更多细节了。

这确实适用于Postgres。

我以错误的方式阅读SQLite文档吗? https://sqlite.org/lang_update.html

以下是查询:

BEGIN;
-- Statement 1
CREATE TEMP TABLE tempEdits (identifier text, serverEditTime double precision);
-- Statement 2
INSERT INTO tempEdits (identifier, serverEditTime)
VALUES
    ('uuid1', 1.5),
    ('uuid2', 2.2),
    ('uuid3', 3.3);
-- Statement 3
UPDATE
    "pEdits"
SET
    "serverEditTime" = t.serverEditTime
FROM 
    "pEdits" AS e JOIN tempEdits AS t ON e.identifier = t.identifier
WHERE   
    e.identifier = t.identifier;
END;

设置查询:

CREATE TABLE "pEdits" (identifier text, serverEditTime double precision);
INSERT INTO (identifier)
VALUES
    ('uuid1'),
    ('uuid2'),
    ('uuid3');

2 个答案:

答案 0 :(得分:3)

您想要的逻辑是:

UPDATE "pEdits"
    SET "serverEditTime" = t.serverEditTime
FROM tempEdits t 
WHERE "pEdits".identifier = t.identifier;

换句话说,不应在FROM子句中重复进行更新的表-除非您的意图是自我联接。

答案 1 :(得分:3)

SQLite不支持UPDATE语句中的联接。

相反,您应该使用相关子查询:

UPDATE pEdits
SET serverEditTime = (
  SELECT t.serverEditTime  
  FROM tempEdits AS t 
  WHERE t.identifier = pEdits.identifier 
);

请参见demo


编辑:从版本3.33.0+(2020-08-14)开始,SQLite支持类似Postgresql的FROM子句。参见https://www.sqlite.org/lang_update.html#upfrom