对于我的查询,我有两个表,定义如下:
权限表:
| permission_id | permission_description |
|---------------|------------------------|
| 1 | Create User |
| 2 | Edit User |
| 3 | Delete User |
users_permissions表:
| permission_id | user_id |
|---------------|---------|
| 1 | 1 |
| 1 | 2 |
| 3 | 2 |
| 3 | 5 |
| 1 | 3 |
| 3 | 1 |
现在,我需要检索列表的所有的权限permissions
表,其中一列指示是否与用户user_id
的1
存在对于每个权限users_permissions
表。
所以,我想要的查询输出是:
| permission_id | permission_description | has_permission |
|---------------|------------------------|----------------|
| 1 | Create User | TRUE |
| 2 | Edit User | FALSE |
| 3 | Delete User | TRUE |
到目前为止,我已经尝试了以下查询,但它返回permissions
所有user_id
值的条目:
SELECT permissions.permission_id,
permission_description,
CASE WHEN user_id = 1 THEN 'TRUE' ELSE 'FALSE' END AS has_permission
FROM permissions
INNER JOIN users_permissions ON permission.permission_id = users_permissions.permissions_id;
我如何将其限制为每个条目permission
?
为清楚起见,最终目标是获取可用权限列表并标记用户已经拥有的权限。
如果您只想知道一个用户的答案,那么exists subquery
就可以完成这项工作 - 无需加入。
SELECT P.permission_id
, P.permission_description
, CASE WHEN exists (select 1 from users_permissions UP where UP.permission_id = P.permission_id and UP.user_id = 1) THEN 'TRUE' ELSE 'FALSE' END AS has_permission
FROM [permissions] P
PS - 我不建议将表称为permissions
SQL Server 中的保留字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句