sql - 2个资源关系-为每条记录选择每条记录-即使pivot没有定义它
问题描述
我有 2 个资源:用户和权限 - 还有一些连接表,例如user_privilege
所以我的结构是这样的:
user
user_id, name
1 John
2 Daniel
3 Paul
privilege
privilege_id, name
1 Perm 1
2 Perm 2
3 Perm 3
user_privilege
user_id, privilege_id
1 1
1 2
2 1
如果 user_privilege 中有记录,则表示用户具有此权限。
但我也想选择用户没有的权限。
选择所有给定的权限很容易
但我想要像这样的输出:
privilege_id, user_id, has
1 1 true
2 1 true
3 1 false
1 2 true
2 2 false
3 2 false
1 3 false
2 3 false
3 3 false
所以实际上它就像每个用户的每个特权一样 - 但是如果用户有这个特权或者没有这个信息。
我想在 Posgres db 中这样做。
解决方案
你想要一个交叉连接user
,privilege
然后做一个外部连接user_privilege
来测试那个用户是否有权限
select au.user_id, au.privilege_id,
up.privilege_id is not null as has_priv
from (
select u.user_id, p.privilege_id
from "user" u
cross join privilege p
) au
left join user_privilege up on (au.user_id, au.privilege_id) = (up.user_id, up.privilege_id)
order by user_id, privilege_id
推荐阅读
- excel - 在电源查询中生成标签列表
- php - RedBean.php 本身的致命错误
- java - 使用 REST 服务和响应将 Java 关键字“native”作为变量之一
- view - Proc sql:通过将数据从一年复制到另一年来创建视图
- curl - 使用 curl 验证 codecov 会引发错误:curl: (60) SSL 证书问题:无法获取本地颁发者证书
- vue.js - vue-router push 数据数组很大时不隐藏第一页
- node.js - 我如何在阿多尼斯中使用 whereHas ?
- android - Android - 如何获取每个应用程序的使用/屏幕时间?
- wordpress - 如何根据表单输入更改文本?(立即显示价格)
- sql - 在python中加速SQL到字典