Mysql案例之COALESCE函数使用详解

devtools/2024/12/5 3:25:15/

hello,大家好,我是灰小猿!最近在做一个三表关联查询的场景处理时,遇到了一个比较有用的MySQL函数,在这里记录一下,大概场景如下:

需求场景

场景:有一张object_rel表,表中有一个object_id,这个object_id可能是object_a表的主键ID,也可能是object_b表的主键ID,object_a表和object_b表中有name字段,现在要查询object_rel表的数据,并且要根据object_rel表对应的name排序,请写一条sql实现这个查询

object_rel表结构及数据如下:

object_a表结构及数据如下:

object_b表结构及数据如下:

需求分析

针对上面的需求,如果要查询 object_rel 表的数据,并根据 object_rel 表中 object_id 对应的 object_a表或object_b表的 name 字段进行排序,可以使用 LEFT JOIN 连接这两个表。但是由于object_id字段可能存在object_a表也可能存在于object_b表,所以如果直接连表查询,查询出来的name列的数据可能为空,那么有没有一个函数,可以实现如果能在object_a表查询出name,就使用object_a表的name,否则就使用object_b表的name呢?

这个时候就需要使用到COALESCE函数了,

COALESCE函数

在COALESCE函数中,你可以将查询的列直接传入函数中,函数会优先取在关联表中存在数据的属性值

下面是一条示例 SQL 语句:

SELECT object_rel.*, COALESCE(object_a.name, object_b.name) AS name 
FROM object_rel 
LEFT JOIN object_a ON object_rel.object_id = object_a.id 
LEFT JOIN object_b ON object_rel.object_id = object_b.id 
ORDER BY name;

查询结果如下:

SQL解读

解读一下上面的SQL

  1. COALESCE 函数

    1. 使用 COALESCE 函数来选择 name。如果 object_a 表中找不到对应的记录,则使用 object_b 表中的name

  2. LEFT JOIN

    1. 两个 LEFT JOIN 分别连接 object_a 表和 object_b 表,以确保能从任意一个表中获取对应的name

  3. ORDER BY

    1. 根据name 字段进行排序。

这样就可以获得 object_rel 表的数据,并根据object_a表的name或object_b表的name进行排序了,同时如果想要增加某一张的表条件过滤,可以直接使用WHERE条件拼接即可。

本次分享到此,我们下期见!


http://www.ppmy.cn/devtools/136006.html

相关文章

关于中断向量表中没有EXTIx_IRQHandler的问题

如果你在中断向量表查找中断向量服务函数时,没有查找到EXTI7_IRQHandler等,是因为中断向量中根本就没有这个函数。 STM32 的中断向量表通常由启动文件(如 startup_stm32f1xx.s)定义。在该文件中,所有的中断服务例程&a…

程的基本概念和学习建议

编程是编写、测试、调试和维护计算机程序的过程,它是计算机科学和信息技术领域中的核心技能之一。通过编程,人们可以创建软件应用、网站、游戏、操作系统等,以实现自动化、数据处理、问题解决和创新。 以下是一些关于编程的基本概念和学习建…

BEV:显示相机视角转换-----FastBEV/IPM与LSS

一、背景 BEV方案中,将图像视角转换到BEV视角的方法对模型性能影响较大,FastBEV的速度较快,但投影效果上限不高,LSS投影上限较高,但速度较慢 (耗时相对较高)。是否有折中的方案,在耗…

本科论文要求

本科论文要求 要求 1.到杭电本部答辩; 2.论文正文不能少于25页(按照标准格式),最好在30页以上; 3.论文平台:查重功能格式校验功能 4.答辩过程需要将自己的系统或应用进行5分钟演示,在答辩之…

MAAS | 使用 tmux 运行模型

目录 使用方法为什么推荐 tmux ? tmux 是一个强大的终端复用工具,非常适合长时间运行的任务(例如训练模型),即使连接断开,任务也能继续运行。以下是使用 tmux 跑模型的常用方法。 使用方法 启动 tmux 会话…

嵌入式学习-C嘎嘎-Day06

嵌入式学习-C嘎嘎-Day06 1. 什么是异常? 2. 抛出异常 3. 捕获异常 4. 标准异常族 5. 异常捕获技巧 5.1 捕获基类异常 5.2 多重捕获 1. 什么是异常? 异常是程序在运行期间产生的问题,即没有语法错误,出现的是逻辑错误,C…

大数据面试题每日练习--Hadoop是什么?它由哪些核心组件组成?

定义:Hadoop是一个开源框架,用于存储和处理大规模数据集。它通过分布式计算和存储技术,提供了高可靠性和高性能的数据处理能力。核心组件: HDFS(Hadoop Distributed File System):分布式文件系统…

【爬虫】Firecrawl对京东热卖网信息爬取(仅供学习)

项目地址 GitHub - mendableai/firecrawl: 🔥 Turn entire websites into LLM-ready markdown or structured data. Scrape, crawl and extract with a single API. Firecrawl更多是使用在LLM大模型知识库的构建,是大模型数据准备中的一环(在…