我在这里搜索了一个答案,并没有找到更接近我问题的答案。
我有以下情况:我需要先显示一个人,然后按升序显示其余的人。来自同一张桌子的所有人。我尝试了UNION,但在那之后,SQL似乎再次混合了一切。
我试过这个:
select name from people where name = 'John'
UNION
select name from people order by name
由于UNION未选择重复值。但最终,它混淆了每一个结果,并没有以正确的顺序显示:
John
Ana
Bruce
我做错了什么?
答案 0 :(得分:5)
您需要使用order by
来获得所需内容。在MySQL中,这很简单:
select name
from people
order by (name = 'John') desc, name
结果集(如表)代表SQL中的无序集。强制执行订单的唯一方法是使用order by
。 order 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