使用JOIN,WHERE,GROUPBY,COUNT的SQL查询

时间:2015-07-10 14:29:49

标签: mysql sql

以下是我正在使用的架构示例。

如何退回所有拥有权限的用户的idname,但是没有该权限的匹配证书?

例如,在这种情况下,查询将返回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)

2 个答案:

答案 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)

你是对的。

别名用户死亡不存在。

相关问题