在使用 SQL 查詢透過 UNION 運算子組合多個表中的資料時,通常需要對結果進行排序。但是,簡單地在查詢末尾添加 ORDER BY 子句可能會導致錯誤。
考慮以下範例:
<code class="language-sql">SELECT table1.field1 FROM table1 ORDER BY table1.field1 UNION SELECT table2.field1 FROM table2 ORDER BY table2.field1</code>
此查詢嘗試對 UNION 操作的結果進行排序,但它會引發異常,因為 ORDER BY 子句不允許位於包含各個 SELECT 語句的括號之外。
要正確排序 UNION 查詢,需要在每個 SELECT 語句中包含 ORDER BY 子句。這確保了在組合各個資料集之前對它們進行排序。以下是重寫上述查詢以正確排序結果的方法:
<code class="language-sql">SELECT * FROM ( SELECT table1.field1 FROM table1 ORDER BY table1.field1 ) DUMMY_ALIAS1 UNION ALL SELECT * FROM ( SELECT table2.field1 FROM table2 ORDER BY table2.field1 ) DUMMY_ALIAS2</code>
透過這種方法,各個資料集在使用 UNION ALL 組合之前會在括號內進行排序。然後,依照最外層 SELECT 語句中 ORDER BY 子句的要求對組合結果進行排序。
以上是如何正確排序 SQL UNION 查詢的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!