Mysql union 和 order by 同时使用需要注意的问题
1.直接使用会报错,
Incorrect usage of UNION and ORDER BY。
SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id DESC
UNION
SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id DESC
原因是有两个order by ,可以把前一个select的order by去掉,但这样排序就是union 后的整个结果集排序。显然不符合需求
因为使用union 就是为了 先查询出第一个结果集 放前面 按某个规则排序。然后再查询出第二个结果集,整体放在第一个结果集后面 ,按某规则排序。
2.有一个坑是 给两个select语句分别加括号,虽然不报错了,但是order by 不起作用。
(SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id DESC)
UNION
(SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id DESC)
在子句中加入limit 有效。
然后还一种方式是
select * from (SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id DESC) t2
UNION
select * from (SELECT * FROM t1 WHERE 1=1 ORDER BY t1.id DESC) t3 这样,注意子查询后记录要起别名 t2、t3
还有union 和union All区别。
union 会去重,即两个查询的结果集会过滤重复行。 union All不会。所以union All 比union效率高。
传送门:
https://www.cnblogs.com/pcheng/p/5939646.html
说的很详细了,覆盖各种坑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】