【发布时间】:2016-06-06 10:56:38
【问题描述】:
我的 SQL Server 数据库中有以下表格;
用户帐户
Username | UserId
Joe | 1
Hannah | 2
Jack | 3
Jill | 4
权限
Permission | PermissionId
p1 | 1
p2 | 2
p3 | 3
p4 | 4
用户权限
UserId | PermissionId
1 | 1
1 | 2
1 | 3
1 | 4
2 | 1
2 | 2
2 | 4
3 | 1
3 | 2
3 | 3
4 | 2
4 | 3
4 | 4
我想返回用户具有权限 p1 和 p2 但没有权限 p3 的用户名集合。
Username
Hannah
我得到的最接近的是这个;
SELECT ua.Username
FROM UserPermission up
JOIN UserAccount ua ON ua.UserID = up.UserId
JOIN Permission p ON p.PermissionId = up.PermissionId
WHERE p.Name = 'p1' OR p.Name = 'p2'
GROUP BY up.UserId,ua.Username
HAVING COUNT(up.UserId) = 2
这只会返回具有权限 p1 和 p2 的用户(感觉就像我走错了方向)
显示结果集的最佳方式是什么(如果我想要拥有 p1 和 p2 但没有 p3 或 p4 的用户获得 +1!)?
谢谢。
【问题讨论】:
-
你正朝着正确的方向前进。我唯一要做的整理是
p.Name IN ('p1', 'p2') -
不排除也有p3的用户
-
我不知道您究竟将什么存储为权限的“名称”,但如果可能的话,最好在 WHERE 子句中通过它们的 ID 来引用它们。
标签: sql sql-server tsql select