随笔 - 116  文章 - 3  评论 - 10  阅读 - 48017

SQL报错:order by不能直接出现在union的子句中

一、背景知识

在联合查询里order by 要写在最后一个子查询之后,并且该排序是对整个联合查询出来的结果集排序的,并不是只对最后一个子查询排序

联合查询的结果是整个查询完成后得出的,而不是将子查询挨个完成后拼接的

 

二、报错写法

SELECT * FROM t1  ORDER BY month ASC
UNION
SELECT * FROM t2  ORDER BY month ASC

 

三、冲突

order by不能直接出现在union的子句中,但是可以出现在子句的子句中。

可以通过两个查询分别加括号的方式,改成如下:

(SELECT * FROM t1  ORDER BY month ASC)
UNION
(SELECT * FROM t2  ORDER BY month ASC)

这种方式的目的是为了让两个结果集先分别order by,然后再对两个结果集进行union。虽然这种方式不报错,但是两个order by并没有效果,这是因为联合查询的结果是整个查询完成后得出的,而不是将子查询挨个完成后拼接的

 

四、完美解决方案

改成如下:

SELECT * FROM
(SELECT * FROM t1  ORDER BY month ASC) t3
UNION
SELECT * FROM
(SELECT * FROM t2 ORDER BY month ASC) t4

 

posted on   进击的许盈盈  阅读(422)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示