簡體   English   中英

MySql:保留 UNION ALL 結果中的順序

[英]MySql: Preserving order in UNION ALL result

我有以下內容:

with
result1 as ( select column1 from table1 order by ... )
result2 as ( select column1 from table2 order by ... )
select * from result1 union all select * from result2;

目的是列出保留順序的result1 ,然后列出保留順序result2 但是, union all似乎並沒有保留其操作數表的順序。 我怎樣才能達到預期的效果? 我已經嘗試將列添加到有序的result1result2 ,然后在這個添加的列上對聯合結果進行排序,但這對於看起來非常典型的東西來說似乎非常笨拙。 有沒有像union all ordered這樣的東西?

行。 以下是您如何使用“窗口函數”對其進行排序。 前提是你用的是MySQL 8+

with
result1 as ( 
select column1, ROW_NUMBER() OVER (ORDER BY ...) AS rownum1, 0 AS rownum2, 
from table1 order by ...
),
result2 as ( 
select column1, 0 AS rownum1, ROW_NUMBER() OVER (ORDER BY ...) AS rownum2
from table2 order by ...
),
result as (
select * from result1 
union all
select * from result2 
)
     
select * from result order by rownum2, rownum1

暫無
暫無

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

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