Mysql联合查询UNION和Order by同时使用报错问题的解决办法
发布时间:2024-01-12 18:44:35
因此,常常出现这样的错误
select * from [IND] where INDID>10
union
select * from [IND] where INDID<9
目前为止,还没有出现问
之后,也许有人会用到类似的查询
select * from [IND] where INDID>10 order by INDID desc
union
select * from [IND] where INDID<9 order by INDID desc
此时就出现问题了,数据库报错。问题就出在order by上
为什么呢?难道UNION和ORDER BY 不能同时存在?
union和 order by 当然是可以同时存在的
但是在使用union的时候,联合查询不仅仅是将数据集合合并
他并不是将每个子查询一个一个查询出来后联接在一起,数据库是将整段查询语句理解之后统一查询得到的是整个的数据集合
另外order by在一个数据集合查询里也只能出现一次并且出现在最后。
因此,在联合查询里,order by 要写在最后一个子查询之后,并且,该排序是对整个联合查询出来的结果集排序的,并不是只对最后一个子查询排序
select * from [IND] where INDID>10
union
select * from [IND] where INDID<9 order by INDID desc
这样就可以对我们联合查询出来的结果集进行整体排序,而不是只对最后一个子查询的结果集排序。
再做一个试验来更充分的说明这个问题
创建一个这样的查询
select * from [IND] where INDID=4
union
select * from [IND] where INDID=2
union
select * from [IND] where INDID=1
union
select * from [IND] where INDID=5
union
select * from [IND] where INDID=3
INDID是主键,在创建数据的时候,数据库里的顺序是12345
但是,实际上得到的结果是和数据库里数据排列的顺序一样的 12345 因此,可以得出结论,联合查询的结果是整个查询完成后得出的,而不是将子查询挨个完成后拼接的。 union select * from [IND] where INDID=2 order by INDID ASC/DESC 如果是这样,在普通的查询中,TOP是在ORDER BY之后执行的,那么 union select * from [IND] where INDID=2 order by INDID 答案是不可以。 虽然说在单句的查询中,TOP是在ORDER BY 之后执行,但是在联合查询中,这样写,TOP的作用域是在子查询里,因此TOP并没有对联合查询的结果集筛选,而只对它所写在的那条子查询里进行筛选,这就像是子查询里的WHERE语句一样,类似这样的筛选作用范围都是在子查询,不像ORDER BY 作用在整个联合查询。 用 rowcount 比起TOP来说,rowcount作为结果集截取置顶更加规范些,毕竟不是依靠查询语句,而是直接设置查询语句获得结果集的数目。 select * from [IND] where INDID=4 union union order by INDID ASC
如果联合查询只是但存的将查询结果联接在一起,那么我们得到的结果应该是:42153
select * from [IND] where INDID=4
union
select * from [IND] where INDID=1
union
select * from [IND] where INDID=5
union
select * from [IND] where INDID=3
这样就可以对整个联合结果集进行排寻了。
另外关于TOP?
select TOP 2 * from [IND] where INDID=4
union
select * from [IND] where INDID=1
union
select * from [IND] where INDID=5
union
select * from [IND] where INDID=3
这样是不是可以得到整个结果集排序后的最前面两条数据呢?
那么如何对联合查询进行 截取置顶N条数据的筛选呢? 很简单
set rowcount 2
select * from [IND] where INDID=1
union
select * from [IND] where INDID=2
select * from [IND] where INDID=3
形如以上查询语句。我们就可以做到对联合查询排序,并获得最上的两条数据了。
既然能利用order by 排序 和 并用rowcount截取集和数量,那么自然联合查询分页等其他应用也不在话下了
猜你喜欢
- 目录相关背景直方图计算法图像指纹与汉明距离平均哈希法(aHash)感知哈希算法(pHash)dHash算法在网上看到python做图像识别的
- 1. 定义生成树# -*- coding: utf-8 -*-#生成树的函数from numpy import * import numpy
- 前言最近这两天在看自己之前写的代码,所以正好把用过的东西整理一下,单例模式,在日常的代码工作中也是经常被用到,所以这里把之前用过的不同方式实
- 问题我使用python 2.7和xlwt模块进行excel导出我想设置我知道可以使用的单元格的背景颜色style1 = xlwt.easyx
- 支持CSS属性Safari和WebKit实施大子的CSS 2.1规格所界定的万维网联盟( W3C ) ,以及部分的CSS 3规格。 。这个C
- 安装wgetyum -y install wget创建一个download目录用于下载各种安装包mkdir download切换到刚创建的d
- 如果你搞过ASP的开发,你就会为ASP中没有好的完整的调试环境而头疼不己。我收集了网上相关所有信息提示,想给它做成单机的ASP开发错误提示软
- 今天淘到的,终于可以放心的使用IE7了,再也不用换回IE6做测试了!因为这个10M大小的软件已经包含了从IE3到IE6的版本,安装过程中可以
- 前言我第一次见到飞机大战是在我小学五年级下半学期的时候(2020年),这个游戏中可以说包含了几乎所有我目前可接触到的pygame知识。一、p
- 在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的;同时在WAMP(Windows、Apache、MyS
- access中可以将文本中的数据轻松导入表中,mysql中用起来没那么方便,其实起来也很简单。首先将数据记录按行处理好用特定的字符分开如:“
- 本文实例为大家分享了python创建tcp服务端和客户端的具体代码,供大家参考,具体内容如下1.服务端serverfrom socket i
- 本文实例讲述了Python实现的摇骰子猜大小功能小游戏。分享给大家供大家参考,具体如下:最近学习Python的随机数,逻辑判断,循环的用法,
- 通过python与ffmpeg结合使用,可生成进行视频点播、直播的压力测试脚本。可支持不同类型的视频流,比如rtmp或者hls形式。 通过如
- 使用这些有用的 Python 代码片段提升你的编程技能,在本文中,我将分享 20 个 Python 代码片段,以帮助你应对日常编程挑战,你可
- 我们的搜索示例仍然相当地简单,特别从数据验证方面来讲;我们仅仅只验证搜索关键值是否为空。 然后许多HTML表单包含着比检测值是否为空更为复杂
- 其实这个问题来源于笔者的横坐标太多了,然后生成的那个figure框框太小,导致坐标重叠,而输出的图片是需要批量保存的,总不能每次都拉长截图吧
- 本文实例为大家分享了Pyqt实现简易计算器的具体代码,供大家参考,具体内容如下环境:pycharm、python3.7首先用qtDesign
- 环境centos7django 1.11nginx白话我们可以使用Template 设置我们的网页,同时,一个完美的网页需要css,js,i
- 一、前言前几天需要划分数据集,就写了一个小demo去完成这个任务。随机划分图片数据集任务描述:我的所有图片保存在同一个文件夹里,需要随机将图