如何在订购其余部分时将suple与sql顺序隔离开来?

时间:2015-04-21 23:24:03

标签: mysql sql

我在这里搜索了一个答案,并没有找到更接近我问题的答案。

我有以下情况:我需要先显示一个人,然后按升序显示其余的人。来自同一张桌子的所有人。我尝试了UNION,但在那之后,SQL似乎再次混合了一切。

我试过这个:

select name from people where name = 'John'
UNION
select name from people order by name

由于UNION未选择重复值。但最终,它混淆了每一个结果,并没有以正确的顺序显示:

John
Ana
Bruce

我做错了什么?

2 个答案:

答案 0 :(得分:5)

您需要使用order by来获得所需内容。在MySQL中,这很简单:

select name
from people
order by (name = 'John') desc, name

结果集(如表)代表SQL中的无序集。强制执行订单的唯一方法是使用order byorder by / union查询末尾的union all适用于整个查询。

另外,如果你使用union all,那么你的代码就会接近工作 - 这比union更受欢迎。 union操作会执行其他操作以删除重复项。在这种情况下,重新排序结果,一个方便的提醒,您只能在使用order by时依赖于结果的顺序。

答案 1 :(得分:2)

您也可以在派生表中使用UNION ALL

SELECT name
FROM 
(
    SELECT 1 AS Row_Id, name
    FROM people
    WHERE name = 'John'

    UNION ALL

    SELECT 2 AS Row_Id, name
    FROM people
) t
ORDER BY Row_Id