union组合结果集时的order问题
在近期的一个项目中,我遇到了一个关于使用UNION组合两个SELECT查询结果的问题。每当尝试执行包含UNION的SQL语句时,总会遇到错误,错误提示集中在UNION附近。由于查询中包含了GROUP,我曾一度猜测是否是因为UNION不支持与GROUP一起使用。
时间紧迫,我选择了在程序中处理结果合并。但程序员对代码完美性的追求让我始终感到不适,如同鲠在喉,必须搞清楚问题的真相。
深入研究了MS的在线帮助文档,在关于UNION的描述中,我发现了一段重要的信息。原来,在使用UNION运算符时,各个SELECT语句不能包含它们自己的ORDER BY或COMPUTE子句。这些子句只能在最后一个SELECT语句之后使用,应用于最终组合的结果集。而GROUP BY和HAVING子句则可以在各个SELECT语句中指定。
这段说明并没有禁止在查询中使用GROUP,而是限制了在UNION操作中不能使用ORDER BY。回顾我的SQL语句,发现问题正出在这里。尝试移除ORDER BY后,错误果然消失了。也就是说,使用UNION时,各个查询可以使用GROUP,但不能对最终结果集进行排序或计算。
那么,如果我们需要在查询中进行分组操作怎么办呢?通常情况下,GROUP BY只能在每个查询中单独使用,针对各自的查询结果进行分组,而不能针对UNION后的组合结果集进行排序。有些开发者试图在每个查询中先排序,然后再使用UNION组合,这种做法并不符合标准SQL的用法。
UNION还有一个变种是加上ALL关键字。默认情况下,UNION操作会删除重复的结果项,如果需要保留所有结果,包括重复项,可以使用ALL。如果确信各查询结果不会重复,使用ALL可以提高效率。掌握了这一点,我在编写涉及UNION和GROUP的SQL语句时更加得心应手。
网络推广
- html如何对span设置宽度
- 无光驱无U盘安装系统的图文教程
- 电脑重启后罗技m336蓝牙鼠标不自动连接该怎么办
- 电脑自带的日语输入法打不出日语怎么办?
- 清理电脑灰尘需要注意的三大事项
- css后代选择器使用方法实例
- Dreamweaver怎么制作动态导航- dw网页添加动态导航
- 无线鼠标怎么连接-无线鼠标连接电脑
- 电脑蓝屏提示:Bunknown hard error该怎么解决?
- cpqdfwag.exe是什么进程 能结束吗 cpqdfwag进程查询
- Win10系统如何取消开机密码?Win10取消开机密码的
- win10桌面背景不显示怎么办 win10桌面背景不显示解
- 巧用DW判断字符串中是否有换行
- 小米4已开始推送Win10 Mobile预览版10536.1004更新
- Dreamweaver中制作活动菜单条效果的方法
- 女巫的遗产:羁绊配置 女巫的遗产:羁绊最低配