以下是我正在使用的架构示例。
如何退回所有拥有权限的用户的id
和name
,但是没有该权限的匹配证书?
例如,在这种情况下,查询将返回0,john,因为john具有" delete"许可,但没有匹配"删除"认证
(这个架构是随意的和设计的,我只是试图获得此查询的语法/选择逻辑)
users
=====
id name
--------
0 john
1 joe
user_permissions
================
uid permission
--------------
0 'edit'
0 'delete'
1 'edit
user_certs
==========
uid cid
-------
0 'edit'
1 'edit'
我试过了,这个,我知道最后一行是错误的。
SELECT DISTINCT id, name FROM users
LEFT JOIN user_permissions users ON users.uid = user_permissions.uid
LEFT JOIN user_certs ON users.id = user_certs.uid
WHERE (user.permission = 'delete')
GROUP BY id, name
HAVING (COUNT(user_certs.cid = 'delete') = 0)
答案 0 :(得分:2)
获取所有没有匹配证书的权限,然后对用户进行分组:
select
u.id,
u.name
from
users u
inner join user_permissions p on p.uid = u.id
left join user_certs c on c.uid = p.uid and c.cid = p.permission
where
c.uid is null
group by
u.id,
u.name
答案 1 :(得分:0)
别名用户死亡不存在。