PostgreSQL 更新的行多于 where 条件?

PostgreSQL updating more rows than in where condition?

我有以下简单的 SQL 更新:

update t2 set col = 2 
from t2, t1
where t2.id = t1.id
    and t1.name = 'test';

但是 t2 中的所有行都已更新!即不只是 id 其中 name 是 'test',我如何在 Postgres 中实现这一点?

我猜你的意思是:

update t2
    set col = 2 
from t2 join
     t1
     on t1.id = t2.id
where t1.name = 'test';

条件 t1.id = t1.id 在查询中没有多大意义。相当于t1.id is not null。因此,t2 中的所有行都会因交叉连接而得到更新。

你从from t1,t2那里得到的太多了 这样做:

update t2 set col = 2 
from t1
where t2.id = t1.id
    and t1.name = 'test';

如果您必须在 from 别名中包含 t2 并在 where..

中连接所有三个表
update t2 as t2_up set col = 2 
from t2 as t2_from , t1
where t2_from.id = t1.id
    and t2_up.id = t2_from.id
    and t1.name = 'test';