我有一个 PostgreSql 数据库,其中有两个具有相同外键的表(谁是
User
)。
我有一个表 A(所有用户的列表)和一个表 B(我关注的用户列表)。
我想过滤表 A 并添加一个新列来告诉我用户是否在表 B 中。
目前我在多个任务中执行此操作:
我的问题是:我可以更有效地做到这一点吗?例如在一个查询中?
我希望我说得足够清楚 - 提前感谢您的回答
你需要学会根据集合而不是事件的顺序来思考。然后,您的问题将变为 update tablea ,指示用户是否也在 tableb 中。 这可以通过 exists 在单次更新中完成(添加适当的列后)。 (我假设提到的外键不是彼此的,而是第三个表)。 (参见演示)
-- one time action
alter table tablea add column in_tableb boolean default false;
-- recurring update
update tablea a
set in_tableb = exists ( select null
from tableb b
where b.user_id = a.user_id
);