我有一个表格:
username | role ---------+------ name1 | internal name1 | admin name2 | internal name3 | admin name4 | external
我需要找到所有具有"内部"或"管理员"角色但没有两者(基本上是异或)的用户.我怎么能在SQL中这样做?
产生类似于下面的表单的查询将是完美的:
username | internal | admin ---------+----------+------- name2 | 1 | 0 name3 | 0 | 1
如果它有助于我使用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;
如果可以复制名称/角色对,则使用having count(distinct role) = 1
.