如何解决从临时表更新多个值
我很困惑,因为当我在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');
解决方法
您想要的逻辑是:
UPDATE "pEdits"
SET "serverEditTime" = t.serverEditTime
FROM tempEdits t
WHERE "pEdits".identifier = t.identifier;
换句话说,不应在FROM
子句中重复进行更新的表-除非您的意图是自我联接。
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。