当前位置:  数据库>sqlserver

union组合结果集时的order问题

    来源: 互联网  发布时间:2014-09-05

    本文导语:  近日,在一个项目中用到union组合两个select结果,调试sql时总是报错,所报错误也只是说在union附近有问题,因为sql中用到了group,我想也许是union不支持吧,由于时间紧,就先在程序中做了合并处理。但程序员对于代码的完美...

近日,在一个项目中用到union组合两个select结果,调试sql时总是报错,所报错误也只是说在union附近有问题,因为sql中用到了group,我想也许是union不支持吧,由于时间紧,就先在程序中做了合并处理。但程序员对于代码的完美性要求总是不能放弃的,所以,常常会有如鲠在喉的感觉,不搞明白心里会不舒服。

仔细查看了MS的在线帮助,在有关UNION的描述中找到这样一段说明:

如果使用 UNION 运算符,那么各个 SELECT 语句不能包含它们自己的 ORDER BY 或 COMPUTE 子句。而只能在最后一个 SELECT 语句的后面使用一个 ORDER BY 或 COMPUTE 子句;该子句适用于最终的组合结果集。只能在各个 SELECT 语句中指定 GROUP BY 和 HAVING 子句。

在这段说明中并没有说union不能用于group,而是说在各个Select中不能包含order by,而在我的语句中恰恰就有这个,看来是我猜错了。试了一下把order去掉,果然不会报错了。也就是说,使用union的时候,各查询group是可以的,但不能order或compute。那如果说非要group,有没有办法呢?正常情况下只能在最后使用,而且是针对组合后的结果集进行排序的,而我刚才所说的group,就不能用于最终结果集,而只能用于每个查询。

这是正常的用法,有些人想在每个查询中先排序,然后再union,也有非正常的用法,类似:

select * from (select a from [table] order by a) union ...

另外,union后面还可以加上all,在默认情况下,union时会删除重复的项,如果加上all则不进行筛选,组合所有的结果。如果能确定各查询结果不会有重复的项,最好就带上all,因为这样还是可以提高一些效率的。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Mysql联合查询UNION和Order by同时使用报错问题的解决办法
  • java命名空间javax.xml.crypto.dsig.spec类xpathtype.filter的类成员方法: union定义及介绍
  • SQL中Union与Union All的区别有哪些
  • java命名空间java.awt类rectangle的类成员方法: union定义及介绍
  • MySQL union 语法代码示例分析 iis7站长之家
  • java命名空间java.awt.geom类rectangle2d的类成员方法: union定义及介绍
  • Oracle中Union与Union All的区别(适用多个数据库)
  • Mysql联合查询UNION和UNION ALL的使用介绍
  • 在QT开发环境能定义union、struct吗?
  • sqlserver Union和SQL Union All使用方法
  • sql union查询与排序的例子
  • MySQL中使用自定义变量 编写偷懒的UNION示例
  • 深入SQL SERVER合并相关操作Union,Except,Intersect的详解
  • SQL语句的并集UNION 交集JOIN(内连接,外连接)等介绍
  • union semun 变量编译时说大小无法确定,为什么?
  • mySQL UNION运算符的默认规则研究
  • MySQL union 语法代码示例分析
  • C语言、C++中的union用法总结
  • SQL基础语句(数据库函数,时间函数,Union,Case,索引等)
  • SQLSERVER中union,cube,rollup,cumpute运算符使用说明
  • SQL中JOIN和UNION区别、用法及示例介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3