nul*_*tek 15 sql postgresql inner-join sql-update
我正在尝试更新一个名为的表incode_warrants,并将其设置warn_docket_no为viol_docket_no从incode_violations表中.
我在Postgres 9.3中有以下SQL查询,但是当它触发时我收到以下错误:
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 40
与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;
Run Code Online (Sandbox Code Playgroud)
您不能只在FROM子句中使用表别名作为子句中的目标表UPDATE.要更新的(一个!)表就在之后UPDATE.如果需要,可以在那里添加别名.这是您的错误消息的直接原因,但还有更多.
要更新的列始终来自要更新的一个表,并且不能进行表限定.
您不需要在FROM子句中重复目标表.
您的查询应如下所示:
UPDATE incode_warrants
SET warn_docket_no = incode_violations.viol_docket_no
FROM incode_violations
WHERE incode_violations.viol_citation_no = incode_warrants.warnv_citation_no
AND incode_violations.viol_viol_no = incode_warrants.warnv_viol_no;
Run Code Online (Sandbox Code Playgroud)
您不需要任何其他加入。使用此查询,您只需使用另一个表中的列中的值更新一个表中的列。当然,它只在WHERE条件为真时更新。
小智 6
UPDATE incode_warrants iw
SET warn_docket_no = iv.viol_docket_no
FROM incode_warrantvs AS iwvs, incode_violations AS iv
WHERE iv.viol_citation_no = iwvs.warnv_citation_no AND
iv.viol_viol_no = iwvs.warnv_viol_no AND
iw.warn_rid = iwvs.warnv_rid;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18569 次 |
| 最近记录: |