【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/345179.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统-操作系统的概念和功能

文章目录 大家熟悉的操作系统总览操作系统的概念&#xff08;定义&#xff09;操作系统的功能和目标-作为系统资源的管理者操作系统的功能和目标-向上层提供方便易用的服务图形化用户接口联机命令接口脱机命令接口程序接口小结 操作系统的功能和目标-作为最解决硬件的层次小结 …

6. 逻辑删除

逻辑删除对应的是物理删除&#xff0c;分别介绍一下这两个概念&#xff1a; 物理删除 &#xff1a;指的是真正的删除&#xff0c;即&#xff1a;当执行删除操作时&#xff0c;将数据表中的数据进行删除&#xff0c;之后将无法再查询到该数据逻辑删除 &#xff1a;并不是真正意…

数据结构排序——详细讲解归并排序(c语言实现递归及非递归)

上次是快排和冒泡&#xff1a;数据结构排序——详解快排及其优化和冒泡排序(c语言实现、附有图片与动图示意&#xff09; 今天为大家带来归并排序 文章目录 1.基本思想2.递归实现3.非递归实现 1.基本思想 归并排序是一种分治算法&#xff0c;它将序列分成两个子序列&#xff0…

virtualbox Ubuntu 网络连接

一、网络连接需求1—— 上网&#xff1a; 虚拟机默认的NAT连接方式&#xff0c;几乎不需要怎么配置&#xff0c;即可实现上网。 enp0s17以太网必须要开启&#xff0c;才能上网&#xff1b; 但是主机ping不通虚拟机&#xff0c;貌似可以ping 127.0.0.1; 二、主机和虚拟机相互p…

Whisper: openAI开源准确率最高的通用语言语音识别

简介 我们研究了仅通过预测大量互联网音频录音的语音处理系统的能力。当扩大到68万小时的多语言和多任务监督时&#xff0c;生成的模型可以很好地泛化到标准基准&#xff0c;而且通常可以与之前的全监督结果相竞争&#xff0c;但在zero-shot识别设置中&#xff0c;无需进行任何…

5.MapReduce之Combiner-预聚合

目录 概述本地预计算 Combiner 意义实践前提代码日志观察 结束 概述 在 MR、Spark、Flink 中&#xff0c;常用的减少网络传输的手段。 通常在 Reducer 端合并&#xff0c;shuffle 的数据量比在 Mapper 端要大&#xff0c;根据业务情况及数据量极大时&#xff0c;将大幅度降低效…

JVM基础(11)——G1垃圾回收器

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

使用Nginx作为反向代理服务器在Linux中的最佳实践

在Linux环境下&#xff0c;Nginx因其高效性能、稳定性以及丰富的功能集而广泛用于作为反向代理服务器。以下是在Linux中使用Nginx作为反向代理服务器的最佳实践&#xff1a; 1. 安装与配置 首先&#xff0c;确保你的Linux发行版已经安装了Nginx。大多数Linux发行版都提供了Ng…

OpenCV——图像按位运算

目录 一、算法概述1、逻辑运算2、函数解析3、用途 二、代码实现三、结果展示 OpenCV——图像按位运算由CSDN点云侠原创&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 一、算法概述 1、逻辑运算 OpenCV4 针对两个图像之…

图像分割deeplab系列

DeepLab系列是谷歌团队提出的一系列语义分割算法。DeepLab v1于2014年推出&#xff0c;并在PASCAL VOC2012数据集上取得了分割任务第二名的成绩&#xff0c;随后2017到2018年又相继推出了DeepLab v2&#xff0c;DeepLab v3以及DeepLab v3。DeepLab v1的两个创新点是空洞卷积&am…

AI教我学编程之C#类型

前言 在上一课 中我们通过C#入门程序了解到关于C#的基础知识&#xff0c;这节课我们来感受作为C家族最大的黑马&#xff0c;在TIOBE榜单 上受欢迎程度未来两个月可能超越java的存在&#xff1a;C#的魅力 重点先知 1、C#程序或DLL的源代码是一组类型声明。 2、对于可执行程序&…

Git新手?这篇文章带你飞!基础操作一网打尽!

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读Git初识Git啥是版本控制系统&#xff1f;&#xff1f;集中式VS分布式 git使用…