【问题标题】:PostgreSQL update data error in excluded.columnexclude.column 中的 PostgreSQL 更新数据错误
【发布时间】:2021-10-25 23:51:48
【问题描述】:

我尝试使用 PostgreSQL 9.6 更新另一个表中的数据,按照文档和 stackoverflow 建议使用此查询

1. 这个查询是为了找到接近lokasi_esb.geom 的geom 的id_vertex。这个可以忽略,正常使用

CREATE TEMP TABLE temp1 AS 
WITH kuery2 as(
    SELECT id_esb, id_vertex, distant, rank() OVER (PARTITION BY id_esb ORDER BY distant asc) as ranked FROM table vertex)
select id_esb, id_vertex, distant, ranked
from kuery2 
where ranked=1;

2. 这个查询用 id_vertex_nearest 列更新 lokasi_esb 表没有 excluded 表。 ////我已经知道这是错误的,我更新了数字 3

INSERT INTO lokasi_esb(id_esb, id_vertex_nearest) 
select id_esb,id_vertex 
from temp1
ON CONFLICT (id_esb) DO UPDATE
SET lokasi_esb.id_vertex_nearest = temp1.id_vertex;

我收到了这个错误
错误:缺少表 « temp1 » 的 FROM 子句条目
SQL 状态:42P01
字符:634

3. 此查询使用 id_vertex_nearest 列更新 lokasi_esb 表 with excluded

INSERT INTO lokasi_esb(id_esb, id_vertex_nearest) 
select id_esb,id_vertex 
from temp1
ON CONFLICT (id_esb) DO UPDATE
SET lokasi_esb.id_vertex_nearest = excluded.id_vertex;

得到这个错误(从印度尼西亚翻译)
错误:列 exclude.id_vertex 尚不存在
SQL 状态:42703
字符:634

那么谁能帮我弄清楚这里发生了什么?

【问题讨论】:

  • 应该是excluded.id_vertex_nearest,即要插入的字段。

标签: sql postgresql sql-update postgresql-9.5


【解决方案1】:

“排除”记录中的列名指的是目标表的列。并且 SET 表达式中的目标列不能以表名作为前缀(因为无论如何你不能更新不同的表)

所以你需要使用:

SET id_vertex_nearest = excluded.id_vertex_nearest

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    相关资源
    最近更新 更多