当前位置: 首页 > news >正文

【Mybatis系列】Mybatis空值关联

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.问题描述
      • 1.已知条件
      • 2.关联条件
      • 3.初步解法
    • 二.解决方案
      • 1.SQL 如下
      • 2.解释说明

一.问题描述

1.已知条件

已知 table_1 有 3 个字段 order_no,community_id,post_id

已知 table_2 也有 3 个字段 order_no,community_id,post_id

2.关联条件

现在需要将 table_1 和 table_2 进行关联,关联条件是 order_no,community_id,post_id 这 3 个字段,但是 order_no 不为 null,不过 community_id,post_id 是可能为 null,也可能不为 null

3.初步解法

如以下 SQL 所示,发现结果为空,没有查询到数据,实际是有数据,问题在于 community_id 和 post_id 对于空值的处理。

<select id="totalPageInfo" resultType="com.kwan.springbootkwan.entity.dto.CsdnTotalIncomeDTO">SELECT t1.receiver_nick_name AS nickName, SUM(t1.received_money) AS amountFROM table_1 t1 left join table_2 t2on t1.order_no = t2.order_noAND t1.community_id=t2.community_idAND t1.post_id=t2.post_idWHERE 1 = 1<if test="query.startDate != null">AND t1.receive_time <![CDATA[>= #{query.startDate}]]>AND t2.create_time <![CDATA[>= #{query.startDate}]]></if><if test="query.endDate != null">AND t1.receive_time <![CDATA[<= #{query.endDate}]]>AND t2.create_time <![CDATA[<= #{query.endDate}]]></if>GROUP BY nickNameORDER BY amount DESC
</select>

二.解决方案

1.SQL 如下

<select id="totalPageInfo" resultType="com.kwan.springbootkwan.entity.dto.CsdnTotalIncomeDTO">SELECT t1.receiver_nick_name AS nickName, SUM(t1.received_money) AS amountFROM table_1 t1 left join table_2 t2on t1.order_no = t2.order_no<![CDATA[AND t1.community_id   <=> t2.community_idAND t1.post_id<=> t2.post_id]]>WHERE 1 = 1<if test="query.startDate != null">AND t1.receive_time <![CDATA[>= #{query.startDate}]]>AND t2.create_time <![CDATA[>= #{query.startDate}]]></if><if test="query.endDate != null">AND t1.receive_time <![CDATA[<= #{query.endDate}]]>AND t2.create_time <![CDATA[<= #{query.endDate}]]></if>GROUP BY nickNameORDER BY amount DESC
</select>

2.解释说明

在这个 SQL 查询中,由于 community_idpost_id 可能为空,你可以通过使用 COALESCE 函数或 IFNULL 函数(具体取决于你使用的数据库系统)来处理可能的空值情况。

下面是一种修改方式,假设你使用的是 MySQL 数据库:

SELECTt1.receiver_nick_name AS nickName,SUM(t1.received_money) AS amount
FROMtable_1 t1
LEFT JOINtable_2 t2 ON t1.order_no = t2.order_noAND t1.community_id <=> t2.community_idAND t1.post_id <=> t2.post_id
WHERE1 = 1<if test="query.startDate != null">AND t1.receive_time <![CDATA[>= #{query.startDate}]]>AND t2.create_time <![CDATA[>= #{query.startDate}]]></if><if test="query.endDate != null">AND t1.receive_time <![CDATA[<= #{query.endDate}]]>AND t2.create_time <![CDATA[<= #{query.endDate}]]></if>
GROUP BYnickName
ORDER BYamount DESC

在这里,使用了 <=> 操作符,它在 MySQL 中用于处理 NULL 值的比较。如果 community_idpost_id 的其中一个是 NULL,那么 <=> 操作符会返回 true。

请根据你使用的数据库类型来调整语法。如果是其他数据库,可能会使用 COALESCEIS NULL 等不同的语法。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

相关文章:

  • Pandas实战100例 | 案例 40: 分组并应用多个聚合函数
  • Windows下Redis5+可视化软件下载、安装和配置教程-2024年1月8日
  • 统计学-R语言-4.2
  • pandas的iloc函数
  • inflate流程分析
  • Oracle篇—实例中和name相关参数的区别和作用
  • Shell脚本入门实战:探索自动化任务与实用场景
  • 如何为数据保护加上“安全锁”?
  • 影像组学介绍
  • VUE 前端框架学习总结
  • TypeScript快速入门
  • Komodor:Kubernetes 监控工具全面指南
  • Elasticsearch ES实现GEO位置搜索
  • windows配置电脑网络ip地址的方法
  • 前端国际化之痛点(二):多包多库场景下联动多语言
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Gradle 5.0 正式版发布
  • Vultr 教程目录
  • 两列自适应布局方案整理
  • 数组大概知多少
  • 跳前端坑前,先看看这个!!
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 06-01 点餐小程序前台界面搭建
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #、%和$符号在OGNL表达式中经常出现
  • #pragma once
  • $.ajax()方法详解
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (全注解开发)学习Spring-MVC的第三天
  • (一) springboot详细介绍
  • (转)jdk与jre的区别
  • (转)Sublime Text3配置Lua运行环境
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .Net 6.0 处理跨域的方式
  • .Net IOC框架入门之一 Unity
  • .NET 的程序集加载上下文
  • .net 设置默认首页
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET关于 跳过SSL中遇到的问题
  • ?.的用法
  • @Autowired @Resource @Qualifier的区别
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [20160902]rm -rf的惨案.txt
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [C/C++] -- 二叉树
  • [C++]四种方式求解最大子序列求和问题
  • [Flexbox] Using order to rearrange flexbox children