mysql多条查询结果纵向拼接
标签MySQL、UNION、UNION ALL、纵向合并、SQL优化、慢查询治理前言在日常开发中我们经常需要把多条独立SELECT查询的结果上下堆叠合并也就是纵向拼接。很多人容易混淆两个概念JOIN横向拼接增加列UNION / UNION ALL纵向拼接增加行。不少开发直接上手写UNION遇到大数据量直接触发慢查询同时还有LIMIT失效、排序异常、索引无法利用、跨表OR改造等一系列踩坑点。本文系统讲解MySQL纵向拼接语法、底层差异、规范写法、高频陷阱以及线上最优实践。一、什么是纵向拼接横向拼接JOIN两张表根据关联字段左右合并行数重组字段增多。纵向拼接UNION系列把多条查询结果上下堆叠字段结构保持一致行数累加。示意图通俗理解查询A结果 id | name 1 | 张三 查询B结果 id | name 2 | 李四 纵向拼接后 id | name 1 | 张三 2 | 李四二、基础语法与强制约束纵向拼接依靠两个关键字UNION、UNION ALL。硬性规则违反直接报错每条子查询列数量必须完全一致对应位置字段数据类型尽量兼容最终字段名称由第一条SELECT决定后续子查询别名无效不推荐子查询使用SELECT *字段结构变更会直接引发异常。基础示例-- 纵向拼接两条查询SELECTid,usernameFROMuserWHEREstatus1UNIONALLSELECTid,access_keyFROMapp_keyWHEREstatus1;三、UNION 和 UNION ALL核心区别重中之重UNION合并结果后自动全局去重MySQL底层会创建临时表、执行排序比对重复执行计划大概率出现Using temporary; Using filesort性能较差大数据量慎用。UNION UNION ALL DISTINCT 全局去重UNION ALL直接原样纵向拼接不去重、不排序无临时表、无全局排序开销性能远高于UNION优先选用。直观对比测试存在重复数据场景-- UNION自动剔除重复行SELECTuser_idFROMuserWHEREusernamedemoUNIONSELECTuser_idFROMapp_keyWHEREaccess_keydemo_key;-- UNION ALL保留全部记录包含重复SELECTuser_idFROMuserWHEREusernamedemoUNIONALLSELECTuser_idFROMapp_keyWHEREaccess_keydemo_key;四、业务需要去重该怎么写不推荐直接使用 UNION推荐方案UNION ALL 外层DISTINCTSELECTDISTINCTuser_idFROM(SELECTuser_idFROMuserWHEREusernamedemoUNIONALLSELECTuser_idFROMapp_keyWHEREaccess_keydemo_key)t;优势优化器可以自主选择哈希去重不一定强制排序优化空间更大线上标准写法。五、高频踩坑LIMIT 与 ORDER BY 作用范围陷阱1不加括号LIMIT只会作用最后一条子查询❌ 错误写法SELECTid,usernameFROMuserLIMIT10UNIONALLSELECTid,access_keyFROMapp_keyLIMIT10;MySQL理解整体合并之后只取10行不是两条各自限制10条。✅ 正确写法子查询使用括号包裹(SELECTid,usernameFROMuserLIMIT10)UNIONALL(SELECTid,access_keyFROMapp_keyLIMIT10);陷阱2子查询内ORDER BY默认无效单独写ORDER BY不会生效只有搭配LIMIT时括号内排序才会执行。-- 内部排序生效(SELECTid,usernameFROMuserORDERBYcreate_timeDESCLIMIT5)UNIONALL(SELECTid,access_keyFROMapp_keyORDERBYcreate_timeDESCLIMIT5);陷阱3想要整体结果统一排序把全部拼接结果作为子查询外层统一ORDER BYSELECT*FROM((SELECTid,usernameFROMuserLIMIT10)UNIONALL(SELECTid,access_keyFROMapp_keyLIMIT10))tORDERBYidDESC;六、经典业务场景跨表OR条件优化实战高频原始问题SQL性能差、逻辑存在隐患SELECTt1.id,t1.usernameFROMusert1LEFTJOINapp_keyt2ONt1.idt2.user_idWHEREt1.usernamedemoORt2.access_keydemo_key;这类LEFT JOIN OR跨表条件极易索引失效。标准优化手段拆分查询UNION ALL纵向拼接-- 场景1匹配用户表账号SELECTid,usernameFROMuserWHEREusernamedemoUNIONALL-- 场景2匹配密钥表关联查询用户SELECTt1.id,t1.usernameFROMusert1INNERJOINapp_keyt2ONt1.idt2.user_idWHEREt2.access_keydemo_key;如需去重外层包DISTINCT每条分支独立执行能够正常使用各自索引。拓展只需要查询任意一条匹配数据短路查询登录、账号检索场景找到第一条即可返回减少扫描SELECT*FROM((SELECTid,usernameFROMuserWHEREusernamedemoLIMIT1)UNIONALL(SELECTt1.id,t1.usernameFROMusert1INNERJOINapp_keyt2ONt1.idt2.user_idWHEREt2.access_keydemo_keyLIMIT1))tmpLIMIT1;如果第一条分支命中数据库不需要继续执行第二条查询。七、纵向拼接编码规范与优化建议优先使用 UNION ALL杜绝无条件使用 UNION只有确认必须全局去重时使用UNION ALL DISTINCT不要使用SELECT *显式指定字段保证结构稳定子查询需要限制行数必须用括号包裹多条分支查询务必建立合适索引纵向拼接不会提升单条子查询性能分支数量不宜过多过多子查询可读性变差可以考虑应用层多次查询合并大数据场景避免上万行结果拼接网络传输消耗较大不要依靠UNION实现单表内部去重单表去重直接使用DISTINCT。八、常见误区汇总误区1UNION一定比UNION ALL简洁少量数据无所谓测试环境少量数据看不出差距线上十万级结果集临时表排序会直接造成接口超时。误区2WHERE条件写在一起不如UNION拼接灵活很多跨表OR、复杂多条件检索拆分UNION ALL是唯一能稳定走索引的方案。误区3子查询的字段别名全局生效只有第一条SELECT的别名作为最终列名后续子查询别名会被忽略。误区4UNION ALL内部自动去重不会重复记录会完整保留必须手动处理。九、验证手段使用EXPLAIN分析执行计划UNION可见union、Using temporary、Using filesortUNION ALL执行计划简洁不存在全局临时表与排序十、全文总结MySQL纵向拼接依靠UNION / UNION ALL作用是堆叠多行横向合并依靠JOIN二者不要混淆性能铁律优先 UNION ALL需要去重采用 UNION ALL DISTINCT尽量避免直接UNIONLIMIT、ORDER BY作用范围容易踩坑子查询增加括号控制作用域LEFT JOIN OR跨表条件慢查询首选方案拆分为多条查询UNION ALL纵向拼接任何优化的前提每条独立子查询本身能够正常命中索引。日常开发牢记纵向拼接只是结果合并手段无法提升单条查询扫描效率优化重心依然在每条分支SQL与索引设计。

相关新闻

MySQL查询去重是使用UNION还是使用DISTINCT

MySQL查询去重是使用UNION还是使用DISTINCT

标签:MySQL、SQL优化、去重、UNION、DISTINCT、UNION ALL、执行计划 前言 开发过程中经常面临数据去重需求,大家常会纠结两种方案: 使用 DISTINCT 在单条结果集中完成去重;使用 UNION 合并多条查询并自动去重。 还有很多开发者分不…

2026/7/23 18:35:00阅读更多 →
深入解析TI N2HET指令集:从硬件定时器原理到汽车ECU实战编程

深入解析TI N2HET指令集:从硬件定时器原理到汽车ECU实战编程

1. 项目概述:为什么需要深入理解N2HET指令集?在汽车发动机控制单元(ECU)、电机驱动或者任何对时序有“变态级”要求的嵌入式实时系统中,通用CPU软件循环的“软定时”早就被淘汰了。这类场景下,我们需要的是…

2026/7/23 18:35:00阅读更多 →
线程同步——互斥和条件变量

线程同步——互斥和条件变量

文章目录1. 互斥锁1.1 互斥锁1.1.1 普通互斥锁加锁代码示例1.1.2 递归互斥锁1.3 自旋锁代码示例1.4 定时锁1.4.1 普通定时锁1.4.2 递归定时锁2 读写锁使用方法代码示例3. 锁保护3.1 lock_guard代码示例实现原理3.2 唯一锁4. 条件变量和消费者模式3.1 条件变量3.2 生产者消费者模…

2026/7/23 18:33:00阅读更多 →
TPU如何颠覆英伟达GPU的AI霸权?谷歌的十年逆袭之路

TPU如何颠覆英伟达GPU的AI霸权?谷歌的十年逆袭之路

📌 目录从算力危机到格局颠覆:谷歌TPU十年逆袭史,如何打破英伟达GPU垄断?一、危机催生创新:2013年的算力困局,孕育TPU的诞生二、十年磨一剑:TPUv5p的爆发,性能与成本的双重碾压&…

2026/7/23 19:49:18阅读更多 →
1.2 amdgpu_bo的设计分析 — gem层和ttm层

1.2 amdgpu_bo的设计分析 — gem层和ttm层

接下来的两篇我们对AMD KFD中使用的 BO 涉及的概念和结构体作了一个整体的分析,内容较多,偏理论一些,可以和后面的文章反复对照。如果你对drm系统还不熟悉,那先理解drm框架,可以参见:linux DRM 子系统专栏介绍。不管有没有基础,该文都是一个参考性的文档,不必都理解。 …

2026/7/23 19:49:18阅读更多 →
文献综述写不下去?通义千问智能降维技巧来了,1小时生成逻辑闭环框架,导师当场点赞

文献综述写不下去?通义千问智能降维技巧来了,1小时生成逻辑闭环框架,导师当场点赞

更多请点击: https://intelliparadigm.com 第一章:通义千问赋能文献综述的底层逻辑 文献综述是学术研究的基石,传统流程依赖人工检索、筛选、比对与归纳,耗时长且易受认知偏差影响。通义千问通过大语言模型的语义理解、跨文档推理…

2026/7/23 19:49:18阅读更多 →
【UE4】Generate Visual Studio Project Files sln生成失败 Failed to generate project files

【UE4】Generate Visual Studio Project Files sln生成失败 Failed to generate project files

在安装了UE5后,右键 *.uproject Generate Visual Studio Project Files 后报错如下这是由于UE5的 UnrealBuildTool.exe 的路径和UE4不同导致的 解决方法 方式一:将UE5的 UnrealBuildTool.exe 改名,并双击UE4的 UnrealBuildTool.exe 重新Regis…

2026/7/23 19:49:18阅读更多 →
37岁运维转网络安全:不是冲动,是被现实逼出来的选择

37岁运维转网络安全:不是冲动,是被现实逼出来的选择

37岁运维转网络安全:不是冲动,是被现实逼出来的选择 37岁,做了多年运维。 以前总觉得运维挺稳定:服务器、系统、网络、故障处理,哪里出问题就去哪里救火。 但这两年明显感觉不一样了。 岗位在压缩,自动…

2026/7/23 19:49:18阅读更多 →
DecoTV注册功能详解:临时开启与安全管理最佳实践

DecoTV注册功能详解:临时开启与安全管理最佳实践

DecoTV注册功能详解:临时开启与安全管理最佳实践 【免费下载链接】DecoTV 基于最新版LunaTV二次开发的一个开箱即用的、跨平台的影视聚合播放站。【原KatelyaTV】 项目地址: https://gitcode.com/gh_mirrors/de/DecoTV DecoTV作为一款基于LunaTV二次开发的跨…

2026/7/23 19:47:18阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →