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';
我有以下简单的 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';