我正在尝试查找解决问题的查询:
我的数据库中有这样的东西:
我需要一个选择具有角色5的所有用户的查询但是如果由于某种原因他们有任何其他角色它应该跳过它们
SELECT user_id FROM user_table WHERE roleid = 5 AND (roleid != 3 OR roleid != 1)
仍然返回用户64
答案 0 :(得分:0)
我认为您正在寻找not exists
条款:
select *
from t
where roleid = 5 and
not exists (select 1
from t t2
where t2.user_id = t.user_id and t2.roleid <> 5
);
或者,如果您只是在寻找此类用户,则可以使用group by
和having
:
select user_id
from t
group by user_id
having min(roleid) = max(roleid) and min(roleid) = 5;
(如果roleid
可能是NULL
,那么逻辑就需要考虑到这一点。)