mysql中case when返回多个字段处理方案

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 一般情况下case when结构,返回的字段只能支持一个,但是会有很多业务场景中需要返回一个以上字段信息.这种问题有两个处理方案,一个是将case when结构进行改造,支持返回多个字段;另一种就是保持case when返回字段个数不变(只返回一个字段),修改业务逻辑,在service中按照case when返回一个字段进行处理.本文主要介绍第一种处理方案.下面结合一个业务场景说明如何进行处理.

问题说明


   一般情况下case when结构,返回的字段只能支持一个,但是会有很多业务场景中需要返回一个以上字段信息.这种问题有两个处理方案,一个是将case when结构进行改造,支持返回多个字段;另一种就是保持case when返回字段个数不变(只返回一个字段),修改业务逻辑,在service中按照case when返回一个字段进行处理.本文主要介绍第一种处理方案.下面结合一个业务场景说明如何进行处理.


业务问题场景描述


   现在有一个求职招聘的平台,招聘者会发送简历发送的邀请通知,作为求职端有三种返回状态,1.接收简历发送邀请.2.拒绝简历发送邀请,填写拒绝原因(1.距离太远;2.已找到工作;3.其他);3.收到信息不做处理,即不接受也不拒绝.需要一个sql查询出需要返回两个字段:是否接受简历发送邀请,三种状态:1.接收,2.拒绝,3.不做处理;拒绝状态:0.无拒绝处理;1.距离太远;2.已找到工作;3.其他.只有当求职者拒绝简历发送时拒绝状态才会从1-3中进行取值,接收简历发送邀请或是不做处理时此状态需要返回0.

   业务表简要说明:job_send_post为求职者简历投递记录表,只要是求职者发送过简历都会从此表中添加记录;job_news为求职者发送给招聘者的消息记录表.


处理方式


   case when只允许返回一个字段,原来的不支持就只能自己"新增字段",所以可以使用concat函数进行拼接,此种拼接可以支持拼接多个字段.总结的写法如下:


CASE WHEN 
  条件
THEN CONCAT(字段1,'+',字段2,'+',字段3......)
ELSE CONCAT(字段1,'+',字段2,'+',字段3......)
END


-- 查询招聘端消息记录中求职端是否发送过拒绝简历消息以及拒绝类型,如果没有发送则简历邀请状态为3,拒绝状态为0.如果有则简历邀请状态为2,拒绝原因使用查询出来的refuse_type拒绝类型

IFNULL((SELECT CONCAT(2,"+",refuse_type) FROM job_news WHERE user_id='rxkyogtktutm4pbsi18e' ),CONCAT(3,'+',0))

END) receive_state

   这个场景中就是需要将是否接受邀请字段与拒绝状态字段进行拼接,注意字段中间需要使用一个特殊字符进行拼接,方便service层进行截取.具体执行如下:

SELECT 
(CASE WHEN 
-- 判断user_id为rxkyogtktutm4pbsi18e的求职者是否给招聘端投递过简历记录,如果投递过则说明接受过招聘端的简历邀请,简历邀请状态为1,拒绝状态为0
 IF((SELECT 1 FROM job_send_post WHERE user_id='rxkyogtktutm4pbsi18e' LIMIT 1)=1,TRUE,FALSE)
THEN
  CONCAT(1,'+',0)
ELSE
  -- 查询招聘端消息记录中求职端是否发送过拒绝简历消息以及拒绝类型,如果没有发送则简历邀请状态为3,拒绝状态为0.如果有则简历邀请状态为2,拒绝原因使用查询出来的refuse_type拒绝类型
  IFNULL((SELECT CONCAT(2,"+",refuse_type) FROM job_news WHERE user_id='rxkyogtktutm4pbsi18e' ),CONCAT(3,'+',0))
END) receive_state

以上是处理问题过程,如有帮助,欢迎点赞或留言!


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
122 3
Mysql高可用架构方案
|
28天前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
44 8
|
1月前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
63 5
|
1月前
|
存储 SQL NoSQL
|
1月前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
36 1
|
3月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
585 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
3月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
469 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
1月前
|
关系型数据库 MySQL Java
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
29 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL数据库中给表添加字段并设置备注的脚本编写
通过上述步骤,你可以在MySQL数据库中给表成功添加新字段并为其设置备注。这样的操作对于保持数据库结构的清晰和最新非常重要,同时也帮助团队成员理解数据模型的变化和字段的具体含义。在实际操作中,记得调整脚本以适应具体的数据库和表名称,以及字段的详细规范。
72 8
|
2月前
|
SQL 存储 关系型数据库
MySQL新增字段/索引会不会锁表?
MySQL新增字段/索引会不会锁表?
165 0