我很困惑,因为当我在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');
答案 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