当前位置: 首页 > 知识库问答 >
问题:

从临时表更新多个值

东门子昂
2023-03-14

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

阮疏珂
2023-03-14

你想要的逻辑是:

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

换句话说,正在更新的表不应该在From子句中重复——嗯,除非您的意图是自连接。

景岳
2023-03-14

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子句。看见https://www.sqlite.org/lang_update.html#upfrom

 类似资料:
  • 我找不到任何东西来解释为什么当调用一个SP时,它根据记录是否已经存在于我得到的时态表上来执行插入或更新 系统版本表“MYDB.dbo”上的数据修改失败。“TemporalExample”,因为受影响记录的事务时间早于时段开始时间。 那是什么意思?这似乎只是偶尔发生,我不知道是不是因为我在运行多线程代码,而azure sql只是不喜欢当它是一个时态表时相互连接到同一个表?我正在浏览实体框架(最新版本

  • 问题内容: 我有两张桌子。 表1 包含的公司的地理位置在经纬度坐标中以lat / lng坐标进行地理定位 表2 还包含 表1 中未地理参考的相同公司,以及数百个地址已地理参考的其他公司。 我需要做的就是将 Table1* 公司的lat / lng值插入 表2中 的相应条目中。这些插入可以基于的共同点是该列。 *** 我敢肯定,这是一个简单的问题,但是我很少使用SQL。 问题答案: 假设 插入“ t

  • 我看过很多关于如何在chart.js中添加数据的教程,但都是针对单个图表的。 我使用chartjs创建多个图表(每个图表都有自己的画布和唯一的ID)。例如:图表1位于id=“c1”的画布中,图表2位于id=“c2”的画布中。如何选择图表1并添加新数据?

  • 我已经创建了一个多边形表(多边形),其中包含名称和点(使用多边形值) 我有另一个表(latlon ),它有lat和lot列,包含超过一百万条记录 我必须在“多边形”表中的点的帮助下更新纬度表中的列(区域名称) 以下 select 语句为一条记录提供正确的输出。 有人能帮我在POSTGIS中编写一个UPDATE查询来获取更多的lat,lon值吗?

  • 问题内容: 这似乎很简单,但我坚持使用简单的insert语句。请参见以下内容: 在临时表行中,实际列表是从其他位置动态拉出的(这是出于演示目的)。我收到以下错误消息: 错误代码:1054。“字段列表”中的未知列“ insert_table.resource_id” 现在,我可以在整个temp表上运行一次select,它返回正常值,只是在update语句中失败。我正在MySQL工作台上运行它。完全不