SQL Server UNION - What is the default ORDER BY Behaviour

前端 未结 6 1995
生来不讨喜
生来不讨喜 2020-11-27 20:38

If I have a few UNION Statements as a contrived example:

SELECT * FROM xxx WHERE z = 1
UNION 
SELECT * FROM xxx WHERE z = 2
UNION
SELECT * FROM xxx WHERE z =         


        
6条回答
  •  借酒劲吻你
    2020-11-27 21:19

    In regards to adding an ORDER BY clause:

    This is probably elementary to most here but I thought I add this. Sometimes you don't want the results mixed, so you want the first query's results then the second and so on. To do that I just add a dummy first column and order by that. Because of possible issues with forgetting to alias a column in unions, I usually use ordinals in the order by clause, not column names.

    For example:

    SELECT 1, * FROM xxx WHERE z = 'abc'
    UNION ALL
    SELECT 2, * FROM xxx WHERE z = 'def'
    UNION ALL
    SELECT 3, * FROM xxx WHERE z = 'ghi'
    ORDER BY 1
    

    The dummy ordinal column is also useful for times when I'm going to run two queries and I know only one is going to return any results. Then I can just check the ordinal of the returned results. This saves me from having to do multiple database calls and most empty resultset checking.

提交回复
热议问题