postgresql 如何不更新所有行而仅限于where子句

ykejflvf  于 2023-04-05  发布在  PostgreSQL
关注(0)|答案(2)|浏览(100)

我在postgres中有一个更新查询,如下所示:

update table1 e
set (col1,col2) = 
(select col1,col2 from table2 se
where  e.id = se.id and se.col2 is not null);

然而,这会更新所有行,即使是se.col2为空的行。这些行被更新为空。我只想更新se.col2 is not null的位置。不是所有行。

o2gm4chl

o2gm4chl1#

如果您使用UPDATE的(非标准)FROM子句,这很简单:

UPDATE table1 e
SET (col1, col2) = (se.col1, se.col2)
FROM table2 se
WHERE e.id = se.id AND se.col2 IS NOT NULL;

这假设table2.id是唯一的,或者至少table2中不超过一行与任何给定的table1行匹配。

holgip5t

holgip5t2#

update table1 e
set (col1,col2) = (
  select col1,col2 from table2 se
  where  e.id = se.id
)
where exists (
  select id from table2 se2 
  where se2.id = e.id 
  and col2 is not null
);

DB Fiddle to play with.

相关问题