mysql - MySQL - 在 SELECT 语句中分配新名称并按新名称排序
问题描述
我有一个具有基本结构的表:
id | first_name | last_name | role_id
role_id是 int 类型,用户可以添加新角色。我需要按角色名称排序,而不是按角色 ID,但我想避免加入。有没有办法制作SELECT 语句,我可以做这样的事情:
SELECT users.*, (
if(role_id = 1, roleName),
if(role_id = 2, roleName2),
if(role_id = 3, roleName3))
AS roleName )
ORDER BY roleName DESC
解决方案
使用CASE
表达式:
SELECT *,
CASE role_id
WHEN 1 THEN 'roleName1'
WHEN 2 THEN 'roleName2'
WHEN 3 THEN 'roleName3'
END AS roleName
FROM users
ORDER BY roleName DESC
或者,如果role_id
s 是从 1 到 n 的整数,则使用ELT()
函数:
SELECT *, ELT(role_id, 'roleName1', 'roleName2', 'roleName3') AS roleName
FROM users
ORDER BY roleName DESC
推荐阅读
- c++ - 为什么在 ctor 的参数列表中用 `decltype(x)` 替换成员 `x` 的类型会破坏类模板参数推导?
- java - 如何正确关闭子面板以在检票口中检测其父面板?
- matlab - 需要帮助生成此代码:Dynamic fieldnames to calculate distance btw center of two shapes
- reactjs - 部署构建反应项目后PHP响应为空
- python - 无法让 pytorch 与 tensorboard 一起工作
- c# - 如何将 WPF 项目中的本地数据库同步到在线 Azure 数据库
- go - 如何在字符串文字中转义反引号
- javascript - How to create print method in primeNg table
- sql - 查询平均分的 SQL 查询
- amazon-web-services - 使用 cloudformation 在 AWS ECR 中指定标签不变性