我不敢相信这个问题在其他地方没有得到回答,但我似乎不知道正确的词语来表达我想要做的事情。我正在使用Ruby/Rails和PostgreSQL。
我有一堆用户在DB,我试图添加到一个组基于名称搜索。我需要返回不属于特定组的用户,但也有一个连接表(UserGroups,具有适当的fk)。
是否有一种简单的方法来使用此配置来执行此查询,而不必导致抓取属于该组的所有用户并做类似.where.not(id: users_in_group.pluck(:id))
的事情(这些组可能非常大,所以我不想在用户类型的文本搜索上将该查询发送到DB)。
我需要返回不属于特定组的用户
SELECT *
FROM users u
WHERE username ~ 'some pattern' -- ?
AND NOT EXISTS (
SELECT FROM user_groups ug
WHERE ug.group_id = 123 -- your group_id to exclude here
AND ug.user_id = u.id
);
:
- 选择其他表 中不存在的行