小编典典

PostgreSQL中具有多个联接的UPDATE语句

sql

我试图更新一个名为表incode_warrants,并设置warn_docket_noviol_docket_noincode_violations表。

我在Postgres 9.3中有以下SQL查询,但是当它触发时,出现以下错误:

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

我更喜欢Active Record,所以我的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

阅读 187

收藏
2021-03-23

共1个答案

小编典典

UPDATEPostgres中的有效语句相同:

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子句中重复目标表-特殊情况如下:

此可选添加可通过抑制不会更改任何内容的更新来避免毫无意义的成本:

AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no
2021-03-23