我正在try 更新一个名为incode_warrants的表,并将incode_violations表中的warn_docket_no设置为viol_docket_no.

我在Postgres 9.3中有以下SQL查询,但当它启动时,我得到以下错误:

Error : ERROR:  relation "iw" does not exist
LINE 1: update iw

我更多的是一个活跃的记录人,所以我的原始SQL技能严重缺乏.我想知道是否有人能帮我指出正确的方向,如何让这个问题正确.

update iw
set iw.warn_docket_no = iv.viol_docket_no
from incode_warrants as iw
INNER JOIN incode_warrantvs as iwvs
on iw.warn_rid = iwvs.warnv_rid
INNER JOIN incode_violations as iv
ON iv.viol_citation_no = iwvs.warnv_citation_no and iv.viol_viol_no = iwvs.warnv_viol_no

推荐答案

与Postgres中的有效UPDATE语句相同:

UPDATE incode_warrants iw
SET    warn_docket_no = iv.viol_docket_no
FROM   incode_warrantvs  iwvs
JOIN   incode_violations iv ON iv.viol_citation_no = iwvs.warnv_citation_no
                           AND iv.viol_viol_no = iwvs.warnv_viol_no
WHERE  iw.warn_rid = iwvs.warnv_rid;
-- AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no -- see below

不能只将FROM子句中的表别名用作UPDATE子句中的目标表.(一个!)要更新的表紧跟在UPDATE个关键字之后(如果我们忽略其中可能的ONLY个关键字).如果需要,可以在那里添加别名.这是导致错误消息的直接原因,但还有更多.

要更新的列始终来自要更新的一个表,并且不能限定为表.

您不需要重复FROM子句中的目标表——除了以下特殊情况:

此可选添加可以通过 suppress 不改变任何内容的更新来避免无意义的成本:

AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no

见:

More in the excellent manual on UPDATE.

Postgresql相关问答推荐

无法在timscaleDb中创建Hypertable

使用jOOQ在postgres上取消嵌套enum_range

Postgres 11没有强制执行外键约束?

为什么不能超过 10 个并发连接到 Postgres RDS 数据库

消除 PostgreSQL SELECT 语句中的重复行

Java - 日期保存为前一天

如何让 Rails 使用 SSL 连接到 PostgreSQL?

查询仅属于特定部门的用户

在PostgreSQL中 Select 数组列的总和

错误:must be owner of language plpgsql

如何在数据库表中查找重复条目?

防止 CHARACTER VARYING 字段中出现空字符串

判断materialized视图的上次刷新时间

使用 RPostgreSQL 写入特定模式

安装了 Postgres.app 但它不起作用

在 PostgreSQL 中 Select 进入临时表?

使用 Postgresql 数据库(OSX Lion)创建 Rails 3.1 应用程序

在 pg_restore 期间排除表

使用python将数据从csv复制到postgresql

postgresql NOT ILIKE 子句不包含空字符串值