用户的SQL左联接表
我有下面的示例表(根据我的实际情况进行了简化,因为其中还有一些连接) 我在这个表中有许多用户和许多组 我在用户权限方面遇到问题,有些用户可以在我的应用程序中执行操作,而其他用户则不能。目前,我必须手动检查并找出区别 我想从上表中输入一个查询,它会给出这样的答案用户的SQL左联接表,sql,oracle,join,self-join,Sql,Oracle,Join,Self Join,我有下面的示例表(根据我的实际情况进行了简化,因为其中还有一些连接) 我在这个表中有许多用户和许多组 我在用户权限方面遇到问题,有些用户可以在我的应用程序中执行操作,而其他用户则不能。目前,我必须手动检查并找出区别 我想从上表中输入一个查询,它会给出这样的答案 |permission| u1 | u2 | |perm1 | 1 | 1 | |perm2 | 1 | 0 | |perm3 | 1 | 0 | |perm4 | 0 | 1 | 我并不
|permission| u1 | u2 |
|perm1 | 1 | 1 |
|perm2 | 1 | 0 |
|perm3 | 1 | 0 |
|perm4 | 0 | 1 |
我并不真的想要用户下的1和0,但我想要一些东西,我可以很容易地想象用户1拥有这些权限,而用户2没有。这对我来说非常有用,可以确保用户拥有相同的权限
我已经完成了SQL以获取顶部表,以便查看权限
我在想,某种形式的左连接本身可能就是答案,但我尝试的一切似乎都以无效的SQL结束
有什么提示吗?如果我有了一个起点,我很乐意尝试:)
提前感谢您正在寻找的是所谓的“旋转”。一种方法是通过分组,如:
select permission
, count(case when username = 'u1' then 1 end) as User1
, count(case when username = 'u2' then 1 end) as User2
, count(case when username = 'u3' then 1 end) as User3
, ...
from YourTable
group by
permission
看起来Oracle支持。您可以使用它来完成相同的任务:
select *
from YourTable
pivot (
count(*) as HasPermission
for (username) in ('u1', 'u2', 'u3', ...)
);
select *
from YourTable
pivot (
count(*) as HasPermission
for (username) in ('u1', 'u2', 'u3', ...)
);