mysql - 基于列值的条件 sql WHERE 子句

标签 mysql

我有一个存储用户的表。每个用户都有一个 ID、一个 Name 和一个 Access Level。三种可能的访问级别AdministratorManagerSimple User

我想要的是根据 Access Level 值有条件地从此表中进行选择。我演示了以下逻辑:

  1. 如果用户是管理员,则选择所有用户(管理员、经理、简单用户)
  2. 否则,如果用户是 Manager,则选择所有 Manager 和所有 Simple Users
  3. 否则,如果用户是 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/

相关文章:

MySQL判断满足哪个条件

mysql - 更改 MySql 中列的数据类型没有影响

mysql - sql中特定字段的字段中的唯一值

mysql - 在 GROUP BY 级别上使用 "CASE"命令

mysql - 使用前 4 个数字中的最后一个数字从 MySQL 获取用户详细信息

mysql - 从表中获取使用同一映射表映射的 2 个字段的数据

mysql - Web请求性能在压力下真的很差

php - 如何显示来自 mySQL 数据库的两个单独表的值?

mysql - 按查询分组不返回所有值

mysql - ServiceStack.OrmLite : StringLengthAttribute. MaxText 生成 "LONGTEXT"- 如何设置为 "TEXT"?