sqlserver 查询中使用Union或Union All

 

   在 程序人生网站上 看到了 这篇文章 就收藏了 哈 http://www.ourcodelife.com/article-415-1.html 

   首先,在程序人生网站上,需要负责任的指出的是在SQL Server查询中使用Union或Union All后Order by排序无效,我不确认是不是微软的bug,不过这里却是我实际编程工作的经验,但愿大家看到这篇文章后,不要再走弯路,不要再为做一个快乐的程序员而苦恼。

 

下面以可操作性的代码说明这个bug,权且先认为是bug吧。

 

比如有一张学生表student 和教师表 teacher , 我们要查询所有的教师学生的姓名和年龄,教师排前面,学生排后面,分别按字母顺序,则可能会想写一个这样的Sql语句: (注意,这个语句只是为了说明问题,这并不是一个正确的语句)

SELECT Name,Age FROM Teacher ORDER BY Name 
UNION 
SELECT Name,Age FROM Student ORDER BY Name

实际上,MSSQL并不允许我们写这样的语句,因此将会报错 UNION 附近有语法错误.

其实我们只需要绕开,让ORDER BY 和UNION 不在同一层, 让ORDER 在子查询内而 UNION 在外面(因为我们要先教师学生分开,然后再名字) 这样得到了另外一个Sql语句:(注意,这依然不是一个正确的语句)

SELECT * FROM (SELECT Name,Age FROM Teacher ORDER BY Name) A 
UNION 
SELECT * FROM (SELECT Name,Age FROM Student ORDER BY Name) B

这句Sql语句依然无法通过,因为这又触犯了MSSQL的另外一条语法规定,在子查询中, 如果不存在TOP语句则ORDER BY子句无效. 但是我们需要的是全部结果,并不需要TOP的功能. 显然, TOP 100% 是个解决的方法. 因为100%就是全部了.

 

最后,这条蹩脚的Sql语句出炉了:

SELECT * FROM (SELECT TOP 100 PERCENT Name,Age FROM Teacher ORDER BY Name) A 
UNION 
SELECT * FROM (SELECTTOP 100 PERCENT Name,Age FROM Student ORDER BY Name) B

这就是最后的结果, 为了让ORDER BY 和UNION同时发挥作用,绕了2个弯.

如果想Union前面和后面的集合分开,使用Union all,但要去除重复的记录。

 

但是在使用Union All的时候需要特别注意,在使用Union All的时候,上面讲到的规则,也就是Order by 仍然会失效。

让程序员朋友们又苦恼了吧,下面的解决方法就是重点了。

Select TOP 99.999999 PERCENT Name,Age FROM Teacher ORDER BY Name

在使用了99.999999这个特殊数字后,该问题最终得到解决 ,真是神奇啊。

 

另外补充一点:UNION和UNION ALL的区别 ,UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。(应该就是这种算法让程序员自己编码的Order by排序失效了)。

UNION ALL只是简单的将两个结果集进行链接返回,所以如果我们只是为了链接两个结果集,只要用UNION ALL就可以了,并且从效率上来说UNION ALL也比UNION快,因为它不需要进行筛选排重的。

转载于:https://www.cnblogs.com/dragon-L/archive/2013/04/22/3035937.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word标题大纲级别_快速按标题层级把Word转Excel—附详细操作步骤

如何快速把层级分明的word文档转换成横向从属结构的excel表格一、问题描述文档如下图所示。文档一共三个层次,大纲级别分别是1、2、3级,左则是其文档结构图,可以看出文档层级分明。最终要将文档转换成如下横向从属结构的表格。一个层次的内容…

生成GUID唯一值的方法汇总(dotnet/javascript/sqlserver)

一、在 .NET 中生成1、直接用.NET Framework 提供的 Guid() 函数,此种方法使用非常广泛。GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的任何两台计算机都不会生成重复的 GUID 值(即保证所有…

Thread.CurrentPrincipal HttpContext.Current.User

据说要这样写才稳妥 // This principal will flow throughout the request.VoyagerPrincipal principal new VoyagerPrincipal(yada, yada, yada); // Attach the new principal object to the current HttpContext objectHttpContext.Current.User principal; // Make sure …

江森系统设置服务器日期,江森自控METASYS操作手册

? Alarm? Trend显示窗口中的按钮编号 A B按钮说明允许您编辑所示项目的属性。选择Save按钮可保存修改。 显示这个窗口中以前显示过的内容。每个窗口最多可显示5个历史项目。显示已保存的下一个窗口中的内容。锁定选中的显示窗口(防止被其他拖拽来的项目覆盖)。您可调整被锁定…

servlet中getWriter和getOutputStream的区别

getWriter();getOutputStream();区别:1、getWriter()用于向客户机回送字符数据2、getOutputStream()返回的对象,可以回送字符数据,也可以回送字节数据(二进制数据)如何选择:若果我们回送字符数据&#xff0…

execve系统调用_张凯捷—系统调用分析(3) (基于最新Linux5.0版本系统调用日志收集系统)...

在上一篇文章《系统调用分析(2)》中介绍和分析了32位和64位的快速系统调用指令——sysenter/sysexit和syscall/sysret,以及内核对快速系统调用部分的相关代码,并追踪了一个用户态下的系统调用程序运行过程。本篇中将基于最新的Linux-5.0内核,…

批量下载小说网站上的小说(python爬虫)

随便说点什么 因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的。 想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊! 所以我…

Playground

题意 :求被两点分割的凸包面积的较小值 题意已经给出顺时针啦 就是求以某一个点 和其他所有相邻点组成三角形的面积,然后sum存和求两点的时候就求出那两点的之间所有三角形的和再减掉0点和那两点的面积一减就是其中一个三角形的面积。转载于:https://…

华为欧拉系统服务器开接口,华为操作系统 euleros

华为操作系统 euleros 内容精选换一换Atlas 900 AI集群安装上架、服务器基础参数配置、安装操作系统等操作,请根据集群配置参见对应的手册:《Atlas 900 PoD 用户指南 (型号9000, 直流)》《Atlas 900 PoD 用户指南 (型号9000, 交流)》《Atlas 900 计算节点…

对勾函数_对勾函数?2020福建省中考压轴题分析

训练营机密视频大公开欢迎转发、分享传播知识,传播力量!福建也是全省统一考选择题:这题考的是二次函数的性质,先求出对称轴就好了填空题:这题看似有反比例,确实会用到反比例函数的对称性。但其实重点是考察…

这个textview有问题吗 为什么一使用就崩溃

问题描述<TextViewandroid:id"id/textview1"android:layout_columnSpan"4"android:layout_gravity"fill"android:gravity"right"android:text"0" />public class MainActivity extends Activity {Button one;TextView…

通过Ajax解析和jQuery写了一个小小的导航条

最近在用ajax和jquery做开发&#xff0c;所以闲来无事写了些小导航条&#xff0c;通过ajax解析XML文件动态的创建WEB网站的导航条。 <link href"css/style.css" rel"stylesheet" type"text/css" /><script src"js/jquery-1.8.2.mi…

一次生产事故的优化经历

在一次正常的活动促销之后&#xff0c;客服开始陆续反馈有用户反应在抢标的时候打不开网页或者APP&#xff0c;在打开的时候标的就已经被抢光了&#xff0c;刚开始没有特别的上心&#xff0c;觉得抢标不就是这样吗&#xff0c;抢小米手机的时候也不就这样吗&#xff1f;随着活动…

mysql over rank_SQL学习笔记 - 窗口函数OVER

Window Function 窗口函数Perform calculations on an already generated result set ( a window).&#xff08;在已生成的结果集上执行计算&#xff09;Aggregate calculation(without having to group your data)&#xff08;允许使用聚合函数时不用进行GROUP BY分组&#xf…

用boost库实现traceroute小工具

参考了网上几个 traceroute的实现版本&#xff0c;存在一些缺陷&#xff0c;比如没有做超时处理&#xff0c;或者只能在window下使用。自己用boost实现了一个traceroute小工具&#xff0c;在window下正常运行。 先来看下面实现的原理。这些说明来自维基百科。traceroute&#x…

Win系统利用本地安全策略全面禁止360等软件的安装与运行-1

这个理论应该也可以用在域对下设域用户上.各位不知道有没有这种经历&#xff0c;机子让别人玩了一上午&#xff0c;回来发现&#xff0c;自己干干净净的系统多了一堆某某安全助手&#xff0c;某某杀毒&#xff0c;某某手机助手等等&#xff0c;最可恨的还是不知一系列的&#x…

php配置文件php.ini的详细解析(续)

file_uploads On //是否允许文件上传 upload_tmp_dir "d:/wamp/tmp" //上传文件的临时目录&#xff0c;默认为“/wamp/tm…

服务器iis7.5 配置文件,使用注册表项 - Internet Information Services | Microsoft Docs

Internet 信息服务使用的注册表项的说明07/21/2020本文内容本文介绍了 Microsoft Internet Information Services (IIS) 在 Windows 上使用的注册表项。原始产品版本&#xff1a; Internet information Services原始 KB 数&#xff1a; 954864简介本文还包含有关如何修改注…

access考试素材_NCRE考试当天常见问题处理办法及各科目注意事项大汇总

温馨提醒为了方便大家在21-22号讨论考试抽中的题目&#xff0c;请自觉加入QQ群&#xff1a;776167039考试当天常见问题及处理办法大汇总问题一&#xff1a;考试当天忘记带身份证和准考证原因&#xff1a;这种情况&#xff0c;要么是忘了&#xff0c;要么真没有提前领到准考证。…

腾讯开源手游热更新方案,Unity3D下的Lua编程

写在前面\\xLua是Unity3D下Lua编程解决方案&#xff0c;自2016年初推广以来&#xff0c;已经应用于十多款腾讯自研游戏&#xff0c;因其良好性能、易用性、扩展性而广受好评。现在&#xff0c;腾讯已经将xLua开源到GitHub。\\2016年12月末&#xff0c;xLua刚刚实现新的突破&…