我有一个存储用户的表。每个用户都有一个 ID
、一个 Name
和一个 Access Level
。三种可能的访问级别
是Administrator
、Manager
和Simple User
。
我想要的是根据 Access Level
值有条件地从此表中进行选择。我演示了以下逻辑:
- 如果用户是
管理员
,则选择所有用户(管理员、经理、简单用户
) - 否则,如果用户是
Manager
,则选择所有Manager
和所有Simple Users
- 否则,如果用户是
Simple User
,则只选择他自己
这可能吗?
最佳答案
Providing Access Level 是一个整数,随着实际访问级别的增加而增加: 管理员 = 3 经理 = 2 用户 = 1
然后
SELECT * FROM USERS
WHERE ACCESS_LEVEL <= (SELECT ACCESS_LEVEL FROM USERS WHERE ID = @ID)
如果相反,只需将小于号切换为大于号即可。
适用于 SQL 服务器
编辑:要得到你想要的,你可以使用这样的东西:
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)
使用这样的查询,您将选择当前 access_level 或更低级别的所有用户。 只有当您的 access_level 为 1(例如普通用户)时才会出现异常(exception)情况,那么只会选择您自己的用户。
关于mysql - 基于列值的条件 sql WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9175949/