我要在Postgresql中加入同一表中的两列,但由于某种原因,我遇到了此错误。不知道如何解决。请帮忙。
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;
答案 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的示例。