我有一个存储用户的表。每个用户都有一个ID
、一个Name
和一个Access Level
。三种可能的Access Levels
是Administrator
,Manager
和Simple User
。
我想要的是根据Access Level
值有条件地从这个表中选择。我展示了下面的逻辑:
如果用户是Administrator
,则选择所有用户(Administrators, Managers, Simple Users
)
否则,如果用户是Manager
选择allManagers
和allSimple Users
否则,如果用户Simple User
只选择他自己
有可能吗?
最佳答案
提供的访问级别是一个整数,它随实际访问级别的增加而增加:
管理员=3
经理=2
用户=1
然后
SELECT * FROM USERS
WHERE ACCESS_LEVEL <= (SELECT ACCESS_LEVEL FROM USERS WHERE ID = @ID)
只要把小于号换成大于号,如果它是相反的。
应用于SQL Server
编辑:要得到你想要的东西,你可以使用这样的东西:
SELECT id,name FROM users where ID = @id
UNION DISTINCT
SELECT id, name from users where access_level <=
(select case when access_level = 1 then 0 else access_level end
from users where id = @id)
使用这样的查询,您将选择当前访问级别或更低级别的所有用户。
唯一的例外情况是,如果您的访问级别是1(例如普通用户),则仅选择您自己的用户。