Postgres:使用Join更新过滤后的行集

时间:2018-12-19 21:13:40

标签: postgresql join filter

我正在尝试将一组需要通过JOIN过滤的行更新到另一个表,但是不会进行实际的更新。

示例:

要更新的表称为t2 它有一个称为t1的主表。 要更新的实际行是从t2开始的行,其中t1的状态为ACTIVE。 实际要更新的字段称为t2.t3_field,将从表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

1 个答案:

答案 0 :(得分:1)

As documented in the manual,您不能在JOINFROM子句前写SET

必须是这样的:

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';