MYSQL UNION ORDERING

Yar*_*ter 8 mysql sql

是否可以订购第一个查询并保留返回的行作为第一个,而不是命令第二个查询.(如果那样的话)

我目前的调查的一个例子是:

SELECT
    *
FROM 
    Devices
WHERE
    Live = 'true'
    AND Category = 'apple'
ORDER BY
    ListOrder
UNION
SELECT
        *
    FROM
        Devices
    WHERE
        DeviceLive = 'true'
Run Code Online (Sandbox Code Playgroud)

我希望apple类别下的设备可以按照列表顺序进行组织,并且位于其他设备上方列表的顶部.但这似乎将两个问题混杂在一起.

Joe*_*lli 16

你需要引入一个人工排序键.就像是:

SELECT
    *, 1 as SortKey
FROM 
    Devices
WHERE
    Live = 'true'
    AND Category = 'apple'
UNION
SELECT
        *, 2 as SortKey
    FROM
        Devices
    WHERE
        DeviceLive = 'true'
ORDER BY SortKey, ListOrder
Run Code Online (Sandbox Code Playgroud)


Don*_*nie 5

UNION具有隐式的重复数据删除功能.这意味着使用它的副作用是一切都混杂在一起,因为它的排序将发生.它(通常,但不总是)意味着您获得排序输出(参见下一段).

UNION ALL删除它,但是,仍然有一点需要注意,没有显式的查询输出order by没有保证排序.这已被另一个答案所涵盖,但我认为值得指出其重要性.