当前位置:  开发笔记 > 编程语言 > 正文

SQL:SQL独家或

如何解决《SQL:SQL独家或》经验,为你挑选了1个好方法。

我有一个表格:

username | role
---------+------
name1    | internal
name1    | admin
name2    | internal
name3    | admin
name4    | external

我需要找到所有具有"内部"或"管理员"角色但没有两者(基本上是异或)的用户.我怎么能在SQL中这样做?

产生类似于下面的表单的查询将是完美的:

username | internal | admin
---------+----------+-------
name2    | 1        | 0
name3    | 0        | 1

如果它有助于我使用Oracle数据库



1> Gordon Linof..:

我会用条件聚合来解决这个问题:

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.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有