union组合结果集时的order问题

 更新时间:2009年09月17日 21:56:40   作者:  
如果能确定各查询结果不会有重复的项,最好就带上all,因为这样还是可以提高一些效率的。
近日,在一个项目中用到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,因为这样还是可以提高一些效率的。

相关文章

  • SQLSERVER2022创建用户的图文教程

    SQLSERVER2022创建用户的图文教程

    用户是数据库中的实体,用于控制对数据库对象的访问权限,本文主要介绍了SQLSERVER2022创建用户的图文教程,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • SQL Server 聚焦存储过程性能优化、数据压缩和页压缩提高IO性能方法(一)

    SQL Server 聚焦存储过程性能优化、数据压缩和页压缩提高IO性能方法(一)

    这篇文章主要介绍了SQL Server 聚焦存储过程性能优化、数据压缩和页压缩提高IO性能方法(一),非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • 详解SQL Server数据库状态和文件状态

    详解SQL Server数据库状态和文件状态

    本文通过实例给大家详解sqlserver数据库状态 (database states) 和文件状态 (database states),非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-09-09
  • sql 时间函数 整理的比较全了

    sql 时间函数 整理的比较全了

    sql 时间函数,需要的朋友可以参考下。
    2009-11-11
  • SQL将一个表中的数据插入到另一个表中的方法

    SQL将一个表中的数据插入到另一个表中的方法

    这篇文章介绍了SQL将一个表中的数据插入到另一个表中的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • SQL Sever无法连接服务器图文解决办法

    SQL Sever无法连接服务器图文解决办法

    SQL数据库不能连接服务器是指在使用SQL数据库时,无法建立与服务器的连接,这可能是由于多种原因导致的,包括网络问题、配置错误、权限限制等,下面这篇文章主要给大家介绍了关于SQL Sever无法连接服务器的解决办法,需要的朋友可以参考下
    2024-06-06
  • sqlServer实现去除字符串空格

    sqlServer实现去除字符串空格

    简单的说SQL 中使用ltrim()去除左边空格 ,rtrim()去除右边空格 ,没有同时去除左右空格的函数,要去除所有空格可以用replace(字符串,' ',''),将字符串里的空格替换为空 。
    2017-01-01
  • SQL server配置ODBC数据源(本地和服务器)详细步骤

    SQL server配置ODBC数据源(本地和服务器)详细步骤

    ODBC是open database connect的缩写,意思是开放式数据库连接,下面这篇文章主要给大家介绍了关于SQL server配置ODBC数据源(本地和服务器)的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • SQL Server安装后本地服务器连接失败的解决方法(仅供参考)

    SQL Server安装后本地服务器连接失败的解决方法(仅供参考)

    访问SQLServer数据库失败时,最常见的错误是"连接服务器失败,SQLServer不存在或访问被拒绝",或者"未能建立与(local)的链接,SQLServer不存在或访问被拒绝",这篇文章主要给大家介绍了关于SQL Server安装后本地服务器连接失败的解决方法,需要的朋友可以参考下
    2023-11-11
  • 详解SQL Server表和索引存储结构

    详解SQL Server表和索引存储结构

    这篇文章主要介绍了详解SQL Server表和索引存储结构,有助于大家对SQL存储方式有深入的理解,参考学习下吧。
    2017-11-11

最新评论