Mysql up.user\u id、u.first\u name、u.last\u name”,那么您不需要使用maxThis@Patrick运行得很好。如果我不想通过将末尾的have comparison更改为“having count(up.permission
Mysql up.user\u id、u.first\u name、u.last\u name”,那么您不需要使用maxThis@Patrick运行得很好。如果我不想通过将末尾的have comparison更改为“having count(up.permission,mysql,sql,join,union,distinct,Mysql,Sql,Join,Union,Distinct,up.user\u id、u.first\u name、u.last\u name”,那么您不需要使用maxThis@Patrick运行得很好。如果我不想通过将末尾的have comparison更改为“having count(up.permission\u id)!=计数(perm.permission\u id)”。但是,当我执行相反的检查时,它将忽略在users\u permissions表中没有任何权限的用户。尝试将第一个加入保留为保留所有用户,但没有帮助。对此情况有何建议? user
up.user\u id、u.first\u name、u.last\u name”,那么您不需要使用maxThis@Patrick运行得很好。如果我不想通过将末尾的have comparison更改为“having count(up.permission\u id)!=计数(perm.permission\u id)”。但是,当我执行相反的检查时,它将忽略在users\u permissions表中没有任何权限的用户。尝试将第一个加入保留为保留所有用户,但没有帮助。对此情况有何建议?
users
id
first_name
last_name
department_id
permissions
id
name
departments (relation to groups and categories based on department)
id
name
category_id
group_id
categories
id
name
groups
id
name
departments_permissions (permission requirement)
department_id
permission_id
categories_permissions (permission requirement)
category_id
permission_id
groups_permissions (permission requirement)
group_id
permission_id
users_permissions (users have permissions here)
user_id
permission_id
SELECT
`users`.id,
`users`.first_name,
`users`.last_name,
`users`.department_id
FROM
`users`
INNER JOIN
`departments` ON `users`.department_id = `departments`.id
INNER JOIN
`users_permissions` ON `users`.id = `users_permissions`.user_id
INNER JOIN
(
SELECT permission_id FROM departments_permissions WHERE department_id = departments.id
UNION DISTINCT
SELECT permission_id FROM categories_permissions WHERE category_id = departments.group_id
UNION DISTINCT
SELECT permission_id FROM groups_permissions WHERE group_id = departments.group_id
) AS tblPermissionsRequired ON `users_permissions`.permission_id = `tblPermissionsRequired`.permission_id
GROUP BY
`users_permissions`.user_id;
SELECT u.first_name,u.last_name,p.name
FROM users u, user_permissions up, permissions p
WHERE u.id=up.user_id AND
up.permission_id=p.id
UNION
SELECT u.first_name,u.last_name,p.name
FROM users u, departments d, departments_permission dp, permissions p
WHERE u.department_id=d.id
AND d.id=dp.department_id
AND dp.permission_id=p.id
UNION
SELECT u.first_name,u.last_name,p.name
FROM users u, departments d, categories_permission cp, permissions p
WHERE u.department_id=d.id
AND d.category_id=cp.category_id
AND cp.permission_id=p.id
UNION
SELECT u.first_name,u.last_name,p.name
FROM users u, departments d, groups_permission gp, permissions p
WHERE u.department_id=d.id
AND d.group_id=gp.group_id
AND gp.permission_id=p.id
SELECT A.id,A.first_name,A.last_name,A.department_id
FROM
(
SELECT U.*,
A.Dept_id AS Dept_ID,
A.permission_id AS [Dept_Wise_Permissiion_List],
UP.permission_id
FROM users U
INNER JOIN (
SELECT D.id Dept_id,CP.permission_id
FROM departments D INNER JOIN categories_permissions CP ON D.category_id = CP.category_id
UNION ALL
SELECT D.id Dept_id,GP.permission_id
FROM departments D INNER JOIN groups_permissions GP ON D.group_id = GP.group_id
UNION ALL
SELECT D.id Dept_id, DP.permission_id
FROM departments D INNER JOIN departments_permissions DP ON D.id = DP.department_id
) A ON U.department_id =A. Dept_id
LEFT JOIN users_permissions UP
ON U.id = UP.user_id AND A.permission_id = UP.permission_id
)A
GROUP BY A.id,A.first_name,A.last_name,A.department_id
HAVING COUNT(ISNULL(A.permission_id,1)) = COUNT(A.permission_id)