下面是我正在使用的架构示例。
如何返回拥有权限但没有该权限的匹配认证的所有用户的 id
和 name
?
例如,查询将返回 0,在本例中为 john,因为 john 具有“删除”权限,但没有匹配的“删除”认证。
(这个模式是任意的和人为的,我只是想了解这个查询的语法/选择逻辑)
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)
最佳答案
获取所有没有匹配证书的权限,然后对用户进行分组:
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
关于mysql - 使用 JOIN、WHERE、GROUPBY、COUNT 进行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31343379/