UNION 与LIMIT 结合使用时应该注意的一个地方

简介:
手册中的信息: 

 
圆括号中用于单个 SELECT语句的 ORDER BY只有当与 LIMIT结合后,才起作用。否则, ORDER BY被优化去除。
(SELECT a FROM tbl_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)

UNION

(SELECT a FROM tbl_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

具体例子,来自CSDN
问题:
  id name    grade goldUser  
  1  jack    300   10  
  2  mach    200   10  
  3  lich    100   10  
  4  rock    1     0  
  5  mick    1     10  
  6  kight   0     10  
  7  babaya  0     0  
  8  kano    0     10 
如何让
grade  = 1 
的这两个数 
即name = mick 和 name = rock 
这两条记录在结果集里的次序随机排序
答案:
SQL code


    create table lk3 (
    id int not null auto_increment primary key,
    `name` char(20),
    grade int,
    goldUser int
    ) engine=myisam;
    insert into lk3 (`name`,grade,goldUser) values
    ('jack',300, 10 ),
    ('mach', 200, 10 ),
    ('lich', 100 ,10 ),
    ('rock', 1, 0 ),
    ('mick', 1 ,10 ),
    ('kight', 0 ,10 ),
    ('babaya', 0, 0 ),
    ('kano', 0, 10);


    (SELECT * FROM lk3 where grade != 1 order by grade desc,goldUser limit 3)
    union all
    (select * from lk3 where grade = 1 order by rand() limit 2)
-- 如果这里没有limit 2的话,grade为1 的两个用户的结果永远都不可能和预期一样。
    union all
    (select * from lk3 where grade != 1 order by grade desc,goldUser limit 3,3)


结果1:


query result(8 records)
id name grade goldUser 
1 jack 300 10 
2 mach 200 10 
3 lich 100 10 
4 rock 1 0 
5 mick 1 10 
7 babaya 0 0 
6 kight 0 10 
8 kano 0 10 

结果2:

query result(8 records)
id name grade goldUser 
1 jack 300 10 
2 mach 200 10 
3 lich 100 10 
5 mick 1 10 
4 rock 1 0 
7 babaya 0 0 
6 kight 0 10 
8 kano 0 10




本文转自 david_yeung 51CTO博客,原文链接: http://blog.51cto.com/yueliangdao0608/81283 ,如需转载请自行联系原作者
相关文章
|
SQL XML 安全
mybatis批量更新数据三种方法效率对比【Mysql】
mybatis批量更新数据三种方法效率对比【Mysql】
4762 0
mybatis批量更新数据三种方法效率对比【Mysql】
|
前端开发 Java 关系型数据库
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
959 0
|
数据格式 Python
【Python】已解决:Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
【Python】已解决:Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
1187 0
|
弹性计算 网络安全
阿里云服务器开放端口教程(通过配置安全组规则)
阿里云服务器开放端口是通过配置安全组规则来实现的,安全组是一种虚拟防火墙
88468 6
阿里云服务器开放端口教程(通过配置安全组规则)
|
SQL HIVE
【Hive SQL】字符串操作函数你真的会用吗?
本文介绍了SQL中判断字符串是否包含子串的几种方法。`IN`函数判断元素是否完全等于给定元素组中的某项,而非包含关系。`INSTR`和`LOCATE`函数返回子串在字符串中首次出现的位置,用于检测是否存在子串。`SUBSTR`则用于提取字符串的子串。`LIKE`用于模糊匹配,常与通配符配合使用。注意`IN`并非用于判断子串包含。
1160 3
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用合集之如何定时运行任务A,以及定时运行任务B,并且任务B能够独立于任务A运行
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
145 0
|
缓存 前端开发 JavaScript
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第10天】在Web开发中,Web Workers和Service Worker提升性能。Workers运行后台任务,防止界面冻结。Web Workers处理计算密集型任务,Service Worker则缓存资源实现离线支持。常见问题包括通信故障、资源限制、注册错误及缓存更新。通过示例代码展示了两者用法,并强调生命周期管理和错误处理的重要性。善用这些技术,可构建高性能的Web应用。
324 0
|
Oracle 关系型数据库 数据库
Oracle 数据库表中截取 两个 | 之间的内容,substr() instr()
Oracle 数据库表中截取 两个 | 之间的内容,substr() instr()
|
算法 数据可视化 数据库
Apriori关联算法讲解以及利用Python实现算法软件设计
Apriori关联算法讲解以及利用Python实现算法软件设计
324 1
Apriori关联算法讲解以及利用Python实现算法软件设计
|
缓存 JSON Go
反射深度揭秘之 reflect.Elem() 方法解析
反射深度揭秘之 reflect.Elem() 方法解析
565 0