我有一个存储用户的表。每个用户都有一个ID、一个Name和一个Access Level。三种可能的Access LevelsAdministratorManagerSimple 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(例如普通用户),则仅选择您自己的用户。

09-10 22:48
查看更多