簡體   English   中英

如何在 sql 中使用聯合排序每個選擇語句

[英]How order by with union in sql each select statement

每個選擇語句順序都運行良好,

但是當我將兩者結合起來時,結果並不能很好地排序

我如何在此查詢中訂購?

SELECT * FROM (SELECT NM, DEP_CD, 2 AS POSITION FROM EMP WHERE DEP_CD='1100' 
and (SELECT COUNT(1) FROM BBS_TABLE WHERE UP_DEP_CD = '1100') > 0 ORDER BY NM 
DESC)
UNION
SELECT * FROM (SELECT NM, DEP_CD, 1 AS POSITION FROM EMP WHERE DEP_CD '1110' 
ORDER BY NM DESC)
ORDER BY 3 DESC

把所有東西都放在一張表中:

select * from (
SELECT * FROM (SELECT NM, DEP_CD, 2 AS POSITION FROM EMP WHERE DEP_CD='1100' and (SELECT COUNT(1) FROM BBS_TABLE WHERE UP_DEP_CD = '1100') > 0 ORDER BY NM DESC)
UNION
SELECT * FROM (SELECT NM, DEP_CD, 1 AS POSITION FROM EMP WHERE DEP_CD '1110' ORDER BY NM DESC)

) ORDER BY 3 DESC

從創建的結果(inner_table)中選擇並相應地排序

SELECT * FROM (
SELECT * FROM (SELECT NM, DEP_CD, 2 AS POSITION FROM EMP WHERE DEP_CD='1100' and (SELECT COUNT(1) FROM BBS_TABLE WHERE UP_DEP_CD = '1100') > 0 ORDER BY NM DESC)
UNION
SELECT * FROM (SELECT NM, DEP_CD, 1 AS POSITION FROM EMP WHERE DEP_CD '1110' ORDER BY NM DESC)
) AS inner_table
ORDER BY 3 DESC

唯一保證的順序是您要求的最后一個。 如果您想按3 DESC然后按NM DESC排序,則必須在查詢結束時指定ORDER BY 3 DESC, NM DESC

您不能NM DESC聯視圖中按NM DESC排序,然后在外部查詢中按3 DESC NM DESC排序並期望保留NM DESC排序。 出於性能原因,SQL 查詢不一定按照它們編寫的順序執行; 當行從查詢的一個步驟流到另一個步驟時,可能不會保留排序。

當心那些看似沒有指定就返回正確順序的技巧。 有一些操作以保留的順序返回行,但您不希望結果依賴於優化器選擇的內部操作。 例如,如果您的UNION使用SORT GROUP BY ,結果可能看起來不錯。 但是明天,如果優化器決定HASH GROUP BY更早,結果可能會有所不同。

如果你想要確定性的結果,你必須在最后完全指定ORDER BY

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM