我有一个表格:
username | role
---------+------
name1 | internal
name1 | admin
name2 | internal
name3 | admin
name4 | external
Run Code Online (Sandbox Code Playgroud)
我需要找到所有具有"内部"或"管理员"角色但没有两者(基本上是异或)的用户.我怎么能在SQL中这样做?
产生类似于下面的表单的查询将是完美的:
username | internal | admin
---------+----------+-------
name2 | 1 | 0
name3 | 0 | 1
Run Code Online (Sandbox Code Playgroud)
如果它有助于我使用Oracle数据库
我会用条件聚合来解决这个问题:
select username,
max(case when role = 'internal' then 1 else 0 end) as internal,
max(case when role = 'admin' then 1 else 0 end) as admin
from t
where role in ('internal', 'admin')
group by username
having count(*) = 1;
Run Code Online (Sandbox Code Playgroud)
如果可以复制名称/角色对,则使用having count(distinct role) = 1.