首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL UNION 與 ORDER BY 共用報錯:正確寫法與執行機制深度解析

     編輯:MySQL 綜合教學

錯誤現象

-- 整體排序
SELECT * FROM ind WHERE indid > 10
UNION
SELECT * FROM ind WHERE indid < 9
ORDER BY indid DESC;

驗證:UNION 非簡單拼接

-- 錯誤:TOP 在子查詢,只限制該分支
SELECT TOP 2 * FROM t WHERE id = 4
UNION SELECT * FROM t WHERE id = 2
UNION SELECT * FROM t WHERE id = 1
ORDER BY id;
-- 結果:僅第一分支限 2 行,整體不止 2 行

-- 正確:用 ROWCOUNT(SQL Server)或最外層 LIMIT(MySQL/PostgreSQL)
-- MySQL:
(SELECT * FROM t WHERE id = 4
 UNION SELECT * FROM t WHERE id = 2
 UNION SELECT * FROM t WHERE id = 1) 
ORDER BY id LIMIT 2;

UNION 內部執行流程

  1. 建立臨時表(Memory → 超大轉 InnoDB/MyISAM)
  2. 依序執行各 SELECT,結果寫入臨時表
  3. UNION:寫入前檢查重複(哈希/排序);UNION ALL:直接追加
  4. 最終對臨時表執行 最外層 ORDER BY / LIMIT
  5. 返回結果集

分頁實戰模板

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved