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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 一般情况下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

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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
5月前
|
运维 监控 关系型数据库
MySQL高可用方案:MHA与Galera Cluster对比
本文深入对比了MySQL高可用方案MHA与Galera Cluster的架构原理及适用场景。MHA适用于读写分离、集中写入的场景,具备高效写性能与简单运维优势;而Galera Cluster提供强一致性与多主写入能力,适合对数据一致性要求严格的业务。通过架构对比、性能分析及运维复杂度评估,帮助读者根据自身业务需求选择最合适的高可用方案。
|
6月前
|
存储 关系型数据库 MySQL
修复.net Framework4.x连接MYSQL时遇到utf8mb3字符集不支持错误方案。
通过上述步骤大多数情况下能够解决由于UTF-encoding相关错误所带来影响,在实施过程当中要注意备份重要信息以防止意外发生造成无法挽回损失,并且逐一排查确认具体原因以采取针对性措施解除障碍。
383 12
|
7月前
|
SQL 关系型数据库 MySQL
解决MySQL "ONLY_FULL_GROUP_BY" 错误的方案
在实际操作中,应优先考虑修正查询,使之符合 `ONLY_FULL_GROUP_BY`模式的要求,从而既保持了查询的准确性,也避免了潜在的不一致和难以预测的结果。只有在完全理解查询的业务逻辑及其后果,并且需要临时解决问题的情况下,才选择修改SQL模式或使用 `ANY_VALUE()`等方法作为短期解决方案。
863 8
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
1037 3
Mysql高可用架构方案
|
6月前
|
监控 NoSQL 关系型数据库
保障Redis与MySQL数据一致性的强化方案
在设计时,需要充分考虑到业务场景和系统复杂度,避免为了追求一致性而过度牺牲系统性能。保持简洁但有效的策略往往比采取过于复杂的方案更加实际。同时,各种方案都需要在实际业务场景中经过慎重评估和充分测试才可以投入生产环境。
358 0
|
7月前
|
关系型数据库 MySQL Java
MySQL 分库分表 + 平滑扩容方案 (秒懂+史上最全)
MySQL 分库分表 + 平滑扩容方案 (秒懂+史上最全)
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
2147 57
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
8月前
|
关系型数据库 MySQL
MySQL数据表添加字段(三种方式)
本文解析了数据表的基本概念及字段添加方法。在数据表中,字段是纵向列结构,记录为横向行数据。MySQL通过`ALTER TABLE`指令支持三种字段添加方式:1) 末尾追加字段,直接使用`ADD`语句;2) 首列插入字段,通过`FIRST`关键字实现;3) 指定位置插入字段,利用`AFTER`指定目标字段。文内结合`student`表实例详细演示了每种方法的操作步骤与结构验证,便于理解与实践。
|
11月前
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
|
12月前
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
646 9