問題
SQL語句中,UNION拼接兩個單獨的SQL時候,單獨的SQL中加入ORDER BY會報錯,ORDER BY只能放在句末。
// 會報錯的語句
SELECT S.S_ID AS ID,S.S_NAME AS NAME
FROM STUDENT S
ORDER BY S_NAME
UNION
SELECT S2.S_ID AS ID,S2.S_NAME AS NAME
FROM STUDENT2 S2
ORDER BY S_NAME
// 可以正常執行的語句
SELECT S.S_ID AS ID,S.S_NAME AS NAME
FROM STUDENT S
UNION
SELECT S2.S_ID AS ID,S2.S_NAME AS NAME
FROM STUDENT2 S2
ORDER BY S_NAME
但是要根據每條分語句的字段來排序的話,這樣寫是不行的。
解決方法
解決方法有兩種
一、將結果集當做一個臨時表再進行排序
SELECT T.* FROM (
SELECT S.S_ID AS ID,S.S_NAME AS NAME
FROM STUDENT S
UNION
SELECT S2.S_ID AS ID,S2.S_NAME AS NAME
FROM STUDENT2 S2) T
ORDER BY T.NAME
二、單獨對表進行排序后再進行合並
SELECT T.* FROM (
SELECT S.S_ID AS ID,S.S_NAME AS NAME
FROM STUDENT S ORDER BY T.NAME) T
UNION
SELECT T2.* FROM (
SELECT S2.S_ID AS ID,S2.S_NAME AS NAME
FROM STUDENT2 S2 ORDER BY T.NAME) T2