Sql 从临时表更新多个值

Sql 从临时表更新多个值,sql,sqlite,Sql,Sqlite,我非常困惑,因为当我在SQLite上运行这个查询时 在MacOS Mojave SQLITE上,我在“FROM”上得到一个语法错误。没有更多的细节 这对博士后来说确实有效 我是否以错误的方式阅读SQLite文档 问题是: BEGIN; -- Statement 1 CREATE TEMP TABLE tempEdits (identifier text, serverEditTime double precision); -- Statement 2 INSERT INTO tempEdits

我非常困惑,因为当我在SQLite上运行这个查询时

在MacOS Mojave SQLITE上,我在“FROM”上得到一个语法错误。没有更多的细节

这对博士后来说确实有效

我是否以错误的方式阅读SQLite文档

问题是:

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
子句中重复正在更新的表,除非您的意图是自联接。

您需要的逻辑是:

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 
);
请参阅。



编辑:从版本3.33.0+(2020-08-14)开始,SQLite支持类似Postgresql的
from
子句。请参阅SQLite不支持
UPDATE
语句中的联接。

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

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



编辑:从版本3.33.0+(2020-08-14)开始,SQLite支持类似Postgresql的
from
子句。看

这是我第一次尝试的!没用。再试一次仍然不起作用。所有这些都是对博士后的工作。我猜我的MacOS版本的Sqlite中有一些bug…需要到其他地方试试。也尝试过类似的东西,但SQLite似乎也因此崩溃了:/正如您编写的-
靠近“e”:语法错误,
如果我将别名更改为
As e
,而不仅仅是
e
,那么我会得到
靠近“FROM”:语法错误。
-太棒了!我试图找到一种语法,它可以在一个SQL命令中完成所有操作,而不是生成200条UPATE语句。对于SQLite,我很确定我是否生成了200条编辑语句并不重要,但出于我的目的,我真的希望上面的内容能够在我的查询生成器的b/c中工作。@ovatsug25。SQLite应该在模仿Postgres功能方面做得更好。我同意这应该是可行的。另一方面,我确实发现了一些可以加快查询速度的东西,对于Sqlite和Postgres来说都是一个很好的API。此外,它还可以避免为我的参数创建一个巨大的数组和一个巨大的字符串:)-这在当前的sqlite版本(3.33)上运行良好,但在缺少
更新的旧版本上会失败。。。来自
。这是我第一次尝试的!没用。再试一次仍然不起作用。所有这些都是对博士后的工作。我猜我的MacOS版本的Sqlite中有一些bug…需要到其他地方试试。也尝试过类似的东西,但SQLite似乎也因此崩溃了:/正如您编写的-
靠近“e”:语法错误,
如果我将别名更改为
As e
,而不仅仅是
e
,那么我会得到
靠近“FROM”:语法错误。
-太棒了!我试图找到一种语法,它可以在一个SQL命令中完成所有操作,而不是生成200条UPATE语句。对于SQLite,我很确定我是否生成了200条编辑语句并不重要,但出于我的目的,我真的希望上面的内容能够在我的查询生成器的b/c中工作。@ovatsug25。SQLite应该在模仿Postgres功能方面做得更好。我同意这应该是可行的。另一方面,我确实发现了一些可以加快查询速度的东西,对于Sqlite和Postgres来说都是一个很好的API。此外,它还可以避免为我的参数创建一个巨大的数组和一个巨大的字符串:)-这在当前的sqlite版本(3.33)上运行良好,但在缺少
更新的旧版本上会失败。。。来自
。您是否使用最新的3.33版本?这时新的
更新。。。添加了来自
。旧版本无法使用。您是否使用最新的3.33版本?这时新的
更新。。。添加了来自
。不适用于任何旧版本。从几天前的3.33版本开始,它就可以了。当然,这需要一段时间才能普及。哦,天哪!今天早上我刚在黑客新闻上看到了3.33版本!所以宇宙和我有一些奇怪的同步:)将来会使用它,但我当然不能依赖它。我不确定苹果是否会让我在旧版本的iOS中编译SQLite。@ovatsug25正如你在评论中看到的,我也不知道。新版本于2天前发布。当然,这个特别的变化是个好消息,但我必须找出还有什么新的。从几天前的3.33版本开始,它就有了。当然,这需要一段时间才能普及。哦,天哪!今天早上我刚在黑客新闻上看到了3.33版本!所以宇宙和我有一些奇怪的同步:)将来会使用它,但我当然不能依赖它。我不确定苹果是否会让我在旧版本的iOS中编译SQLite。@ovatsug25正如你在评论中看到的,我也不知道。新版本于2天前发布。当然,这种特殊的变化是好消息,但我必须找出还有什么新的。