在PostgreSQL中两次连接一个表

时间:2018-07-24 23:01:13

标签: postgresql

我要在Postgresql中加入同一表中的两列,但由于某种原因,我遇到了此错误。不知道如何解决。请帮忙。

  • [42P01]错误:关系“ a”不存在
  • 位置:10

X表包含两个池(ABC,XYZ),标识,数字和说明。如果一个池中存在一个ID,但另一个池中不存在,则应将描述列更新为“ ADD”。池需要加入号码。

UPDATE     A
SET        A.Description = 'ADD'
FROM       X  AS A
LEFT JOIN  X  AS B ON B.number = A.number
          AND B.id = 'ABC'
WHERE      A.id = 'XYZ'
AND       B.number IS NULL
AND       A.Description IS NULL;

1 个答案:

答案 0 :(得分:0)

使用标准SQL不能将联接作为更新的一部分进行,但是您可以做的是包括一个子查询来选择要更新的ID。子查询可以包含一个联接。对于您实际上要完成的工作,我还不太清楚,但是您可以执行以下操作:

UPDATE x SET description='ADD' WHERE number IN (
    SELECT a.number FROM x AS a
    LEFT OUTER JOIN x AS b ON a.number=b.number AND a.id='XYZ' AND b.id='ABC' 
    WHERE b.number IS NULL
);

这会将表x与自身连接在一起,并将选择(并更新)在“ ABC”和“ XYZ”区域中没有匹配编号的任何数字。

PostgreSQL确实具有UPDATE FROM语法,可让您使用复杂的子查询进行更新。它更灵活,但不是标准的。您可以找到这种类型的查询here的示例。