我试图更新一个名为表incode_warrants,并设置warn_docket_no为viol_docket_no从incode_violations表。
incode_warrants
warn_docket_no
viol_docket_no
incode_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
与UPDATEPostgres中的有效语句相同:
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
ONLY
要更新的列始终来自要更新的一个表,并且不能被表限定。
您无需在FROM子句中重复目标表-特殊情况如下:
此可选添加可通过抑制不会更改任何内容的更新来避免毫无意义的成本:
AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no