在postgresql中两次连接一个表



我想在Postgresql中加入同一个表中的两列,但由于某种原因,我收到了这个错误。不知道怎么弄清楚。请帮忙。

  • [42P01]错误:关系"a"不存在
  • 职位:10

X表包含两个池(ABC、XYZ(、id、数字和描述。如果一个池中存在ID,但另一个池不存在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;

使用标准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"one_answers"XYZ"区域中没有匹配数字的任何数字。

PostgreSQL确实有一个UPDATE FROM语法,它允许您使用复杂的子查询进行更新。它更灵活,但它是非标准的。您可以在此处找到此类查询的示例。

最新更新