Postgresql Postgres:使用联接更新筛选的行集

Postgresql Postgres:使用联接更新筛选的行集,postgresql,join,filter,Postgresql,Join,Filter,我试图更新一组行,这些行需要通过连接到另一个表进行过滤,但不会进行实际更新 例如: 要更新的表称为t2 它有一个名为t1的主表。 要更新的实际行是来自t2的行,其中t1上的状态为活动。 要更新的实际字段称为t2.t3_字段,该字段将根据表t3进行更新 UPDATE t2 JOIN t1 ON t1.id = t2.t1_id SET t3_field= t3.id FROM t3 WHERE t3.old_id = t2.old_third_table_id AND t1.status = 'A

我试图更新一组行,这些行需要通过连接到另一个表进行过滤,但不会进行实际更新

例如:

要更新的表称为t2 它有一个名为t1的主表。 要更新的实际行是来自t2的行,其中t1上的状态为活动。 要更新的实际字段称为t2.t3_字段,该字段将根据表t3进行更新

UPDATE t2
JOIN t1
ON t1.id = t2.t1_id
SET t3_field= t3.id
FROM t3
WHERE t3.old_id = t2.old_third_table_id
AND t1.status = 'ACTIVE';
此代码不起作用。有没有一个简单的方法来实现这一点

谢谢你的帮助

Dov

,您不能在
FROM
SET
子句之前写入
JOIN

它必须是这样的:

UPDATE t2
  SET t3_field= t3.id
FROM t1, t3
WHERE t1.id = t2.t1_id
  AND t3.old_id = t2.old_third_table_id
  AND t1.status = 'ACTIVE';
,您不能在
FROM
SET
子句之前写入
JOIN

它必须是这样的:

UPDATE t2
  SET t3_field= t3.id
FROM t1, t3
WHERE t1.id = t2.t1_id
  AND t3.old_id = t2.old_third_table_id
  AND t1.status = 'ACTIVE';

为什么不起作用?有任何错误消息吗?我收到一条错误消息:error:syntax error位于或接近“JOIN”-SQL state:42601查看Postgres上的正确语法:可能重复谢谢。但我认为这是另一种情况。连接在更新表中。在我的例子中,联接位于表上,这有助于过滤要更新的行。正在更新的表是第三个表。为什么不工作?有任何错误消息吗?我收到一条错误消息:error:syntax error位于或接近“JOIN”-SQL state:42601查看Postgres上的正确语法:可能重复谢谢。但我认为这是另一种情况。连接在更新表中。在我的例子中,联接位于表上,这有助于过滤要更新的行。正在更新的表是第三个表。谢谢。我第一次用上面的CTE试了一下,你的回答速度要快得多。再次感谢大家的帮助,谢谢。我第一次用上面的CTE试了一下,你的回答速度要快得多。再次感谢大家的帮助。