当前位置: 首页 > 知识库问答 >
问题:

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

盖锐进
2023-03-14

我正在尝试更新一个名为< code>incode_warrants的表,并将< code>warn_docket_no设置为< code>incode_violations表中的< code>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

共有3个答案

谭俊
2023-03-14
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;
刘博文
2023-03-14

您的查询应该如下所示:

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;

不需要任何其他的加入。使用这个查询,您只需用另一个表中某一列的值来更新一个表中的某一列。当然,只有当< code>WHERE条件为真时,它才会更新。

易弘阔
2023-03-14

与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子句中的目标表。要更新的(one!)表就在UPDATE关键字之后(如果我们忽略中间可能的ONLY关键字)。如果需要,您可以在那里添加别名。这是错误消息的直接原因,但还有更多。

要更新的列总是来自要更新的一个表,不能是表限定的。

您不需要在From子句中重复目标表-除了以下特殊情况:

  • 后greSQL:更新时忽略左外自联

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

AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no

参见:

  • 如何(或我可以)在多个列上选择“DISTINCT”?

关于< code >更新的更多精彩手册。

 类似资料:
  • 问题内容: 我试图更新一个名为表,并设置为从表。 我在Postgres 9.3中有以下SQL查询,但是当它触发时,出现以下错误: 我更喜欢Active Record,所以我的SQL原始技能严重缺乏。我想知道是否有人可以帮助我向正确的方向指出如何正确执行此查询。 问题答案: 与Postgres中的有效语句相同: 您不能仅将子句中的表别名用作子句中的目标表。要更新的(一个!)表紧跟在关键字之后(如果我

  • 问题内容: 我使用Python Requests库下载一个大文件,例如: 大文件的下载速度为每秒+-30 Kb,这有点慢。与bigfile服务器的每个连接都受到限制,因此我想建立多个连接。 有没有一种方法可以同时建立多个连接来下载一个文件? 问题答案: 您可以使用HTTP标头仅获取文件的一部分(此处已涵盖python)。 只需启动几个线程,并获取每个线程的不同范围,就可以完成;) 还要注意,并非每

  • 我有表my_employees,my_departments,my_empdetails,my_periods 和下面的查询在Oracle的旧join语句中。我想用mysql语法转换它,但我无法实现。请帮助

  • 问题内容: 案件: 如何从相等的地方更新数据? 问题: 当我运行以下更新语句时,它将更新中的所有记录(即使中的字段不存在)。 我如何使用的多个更新表的语法,在仅更新记录只有在存在于和平等的吗? 提前致谢。 问题答案: 这是with join in 的正确语法 SQLFiddle演示

  • 问题内容: 我在数据库中有一个表,记录如下: 我的用户为每个匹配项选择一个猜测,我有一个函数可以根据匹配结果计算猜测的结果:如果猜测正确,则结果为(1)如果错误,则结果为(2 ),如果比赛还没有结束,结果将是(默认为0),例如,我有11种猜测的可能性(一次可能有多个正确的猜测):如果我有一场比赛,id = 125,我拥有全部除了8,11之外的其他猜测都是错误的,因此我应该为具有匹配ID的所有匹配更

  • 嗨,我想下载一个多java的文件。网套接字。我可以通过基本的get请求获取文件: 这是完美的,但还不够,因为我希望使用多套接字。我可以通过请求HEAD获得头,这样我就可以只获得内容长度。现在我的计划是使用此代码创建线程。例如,如果我想下载一个有3个线程的文件;我将把内容长度除以3,然后用3个线程下载。(0-99) (100-199) (200-299) = 300300字节,然后我会加入部分,但我