MySQL中union和order by同時使用的實現方法
MySQL中union和order by是可以一起使用的,但是在使用中需要注意一些小問題,下面透過例子來說明。首先看下面的t1表。
1、如果直接用如下sql語句是會報錯:Incorrect usage of UNION and ORDER BY。
SELECT * FROM t1 WHERE username LIKE 'l%' ORDER BY score ASC
UNION
SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score ASC
因為union在沒有括號的情況下只能使用一個order by,所以報錯,這個語句有2種修改方法。如下:
(1)可以將前面一個order by去掉,改成如下:
SELECT * FROM t1 WHERE username LIKE 'l%'
UNION
SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score ASC
該sql的意思就是先union,然後對整個結果集進行order by。
(2)可以透過兩個查詢分別加括號的方式,改成如下:
(SELECT * FROM t1 WHERE username LIKE 'l%' ORDER BY sroce ASC)
UNION
(SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score ASC)
這種方式的目的是為了讓兩個結果集先分別order by,然後再對兩個結果集進行union。但是你會發現這種方式雖然不報錯了,但是兩個order by並沒有效果,所以應該改成如下:
SELECT * FROM
(SELECT * FROM t1 WHERE username LIKE 'l%' ORDER BY score ASC) t3
UNION
SELECT * FROM
(SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score ASC) t4
也就是說,order by不能直接出現在union的子句中,但是可以出現在子句的子句中。
2、順便提一句,union和union all 的區別。
union會過濾掉兩個結果集中重複的行,而union all不會過濾掉重複行。
以上這篇MySQL中union和order by同時使用的實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援指令碼之家。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2249/viewspace-2805691/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL, Incorrect usage of UNION and ORDER BYMySql
- MySQL(select_paren)union_order_or_limit行為MySqlMIT
- MYSQL實現ORDER BY LIMIT的方法以及優先佇列(堆排序)MySqlMIT佇列排序
- sql中union和union all的用法SQL
- mysql的order by和group byMySql
- sql中union和union allSQL
- sql中UNION和UNION ALL的區別SQL
- union 和union all 使用區別
- Linux 執行升訊威線上客服系統:同時支援 SQL Server 和 MySQL 的實現方法LinuxServerMySql
- MySQL中同時存在建立和上次更新時間戳欄位解決方法淺析MySql時間戳
- Java 中實現集合的 keep in order (後續)Java
- postgresql和mysql中的limit使用方法MySqlMIT
- Linux + .net core 開發升訊威線上客服系統:同時支援 SQL Server 和 MySQL 的實現方法LinuxServerMySql
- MySQL中ORDER BY與LIMIT一起使用(有坑)MySqlMIT
- Jupyter Notebook 中同時使用 Python 和 RPython
- union all和union的區別
- union和union all的區別
- SQLServer使用case when中的order bySQLServer
- MAMP 中的 Mysql 和 redis 都是 unix socket 時的配置方法MySqlRedis
- MySQL distinct 和 order by 排序混淆的替代方案MySql排序
- Oracle中的Union、Union All、Intersect、MinusOracle
- MySQL LIMIT 和 ORDER BY 最佳化MySqlMIT
- JAVA 兩個類同時實現同一個介面的方法Java
- javascript實現的同時按下ctrl和其他鍵觸發事件JavaScript事件
- MySQL全面瓦解23:MySQL索引實現和使用MySql索引
- 同時釋出到 github 和 gitcafe 的部落格的方法Github
- iview input實現點選和enter同時搜尋技巧View
- MySQL學習(五) UNION與UNION ALLMySql
- spring-boot 同時配置Oracle和MySQLSpringbootOracleMySql
- MYSQL merge union merge sort_union 的不同MySql
- MySQL按指定順序排序(order by field的使用)MySql排序
- overflow與flex同時使用發現的問題Flex
- java中實現MYSQL的備份和恢復JavaMySql
- mysql order by 和 group by 順序問題MySql
- mysql和redis實時同步資料怎麼實現MySqlRedis
- oracle物件導向技術中的map和order方法有何不同?Oracle物件
- 使用Junit 5時,如何同時使用 junit4和 PowerMockMock
- MySQL之order byMySql