Postgres - select 行,除非计数大于一个和另一个条件

Postgres - select rows except where count is more than one and another condition

我有一个包含以下示例数据的 table:

appuser_id     business_id     role_id
6              2               CLIENT_MANAGER
8              2               CLIENT_ADMIN
6              3               BUSINESS_MANAGER
8              3               BUSINESS_MANAGER
6              4               BUSINESS_MANAGER
8              5               BUSINESS_MANAGER
8              6               BUSINESS_MANAGER

我想创建一个函数,为他的角色 'BUSINESS_MANAGER' 的用户提取所有企业的列表,但是,如果多人管理一个企业(上面的企业 3),并且其中一个用户碰巧在任何其他业务中也有 'CLIENT_ADMIN' 角色,我想跳过那个有争议的记录(跳过业务 3),基本上,给出这个查询:

SELECT * FROM my_table WHERE appuser_id = 8 AND role_id = 'BUSINESS_MANAGER' AND ???;

我想要以下结果:

appuser_id     business_id     role_id
8              5               BUSINESS_MANAGER
8              6               BUSINESS_MANAGER

对于我想要的用户 6 的相同查询:

appuser_id     business_id     role_id
6              3               BUSINESS_MANAGER
6              4               BUSINESS_MANAGER

我不知道从哪里开始这样的事情。

如果谁有更好的标题,欢迎修改。

正如评论中所建议的,您可以使用 not exists:

select * 
from my_table mt
where mt.appuser_id = 6
and mt.role_id = 'BUSINESS_MANAGER' 
and mt.business_id not in (
  select imt.business_id
  from my_table imt
  where exists (
    select *
    from my_table iimt
    where imt.appuser_id <> iimt.appuser_id
    and iimt.appuser_id = mt.appuser_id
    and iimt.role_id = 'CLIENT_ADMIN' 
  )
)