首页 > 解决方案 > 更新以在单个语句中切换布尔列

问题描述

如何以最有效的方式在单个sql语句中组合两个查询?

UPDATE TABLE_A a
SET a.is_active = FALSE
WHERE a.id IN (SELECT id FROM TABLE_B);

同样,但切换剩余ids 的标志:

UPDATE TABLE_A a
SET a.is_active = TRUE
WHERE a.id NOT IN (SELECT id FROM TABLE_B);

标签: sqlpostgresqlperformancequery-optimization

解决方案


在 Postgres 中,您可以LEFT JOINUPDATE语句中使用以下语法:

UPDATE a 
SET a.is_active = CASE WHEN b.id IS NULL THEN FALSE ELSE TRUE
FROM TABLE_A a
LEFT JOIN TABLE_B b ON a.id = b.id

推荐阅读