如何在SQL中查询特定用户?
我有此如何在SQL中查询特定用户?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有此权限表,其中包含以下数据: CREATE TABLE Users ( UserId int, UserName nvarchar(15), Permissions int ) CREATE TABLE Permissions ( PermissionId int, Title NVARCHAR(15) ) 和用户表 Id Title -------------- 1 'Read' 2 'Write' 4 'Update'
权限
表,其中包含以下数据:
CREATE TABLE Users
(
UserId int,
UserName nvarchar(15),
Permissions int
)
CREATE TABLE Permissions
(
PermissionId int,
Title NVARCHAR(15)
)
和用户
表
Id Title
--------------
1 'Read'
2 'Write'
4 'Update'
8 'Delete'
在这种情况下,“大卫”有“读”和“写”权限(1+2=3)
,“莎拉”莎拉只有“删除”权限(8)
,“玛亚姆”有“读”、“写”、“更新”和“删除”权限(1+2+4+8=15)
如何知道David有“读”和“写”权限,或者Sara只有“删除”权限
类似这样,但在一个查询中
Id UserName Permission
-----------------------------------
1 'David' 3
2 'Sara' 8
3 'Maryam' 15
输出(当id=1时):“David具有读写权限”1+2=3
输出(当id=2时):“Sara只有删除权限”8
您可以使用
加入
获得权限:
2 Sara 8 Update 8
这会将值放在单独的行中
您可以使用以下技巧将它们列为列表:
select u.userId, p.title
from users u join
permissions p
on (u.permission & p.id) > 0;
您可以使用
加入
获得权限:
2 Sara 8 Update 8
这将值放在单独的行中
您可以使用以下技巧将它们列为列表:
select u.userId, p.title
from users u join
permissions p
on (u.permission & p.id) > 0;
编辑你的问题并显示你想要的结果?编辑你的问题并显示你想要的结果?
select u.*,
stuff( (select ',' + p.title
from permissions p
where (p.id & u.permission) > 0
for xml path ('')
), 1, 1, ''
) as permissions
from users u;
Select U.UserId , P.PermissionId
From #Users As U
Inner join
#Permissions As P
On P.PermissionId % U.Permisions >= 1
Where U.Permisions - P.PermissionId > 0