当数据来自许多选择和联合在一起时,是否有可能进行排序?如

Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"

如何按名称对此查询进行排序?

我试过了

Select id,name,age
From Student
Where age < 15 or name like "%a%"
Order by name

但这并不奏效。


当前回答

只写

Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
Order by name

顺序被应用到完整的结果集

其他回答

为什么不用TOP X呢?

SELECT pass1.* FROM 
 (SELECT TOP 2000000 tblA.ID, tblA.CustomerName 
  FROM TABLE_A AS tblA ORDER BY 2) AS pass1
UNION ALL 
SELECT pass2.* FROM 
  (SELECT TOP 2000000 tblB.ID, tblB.CustomerName 
   FROM TABLE_B AS tblB ORDER BY 2) AS pass2

TOP 2000000是一个任意的数字,它大到足以捕获所有的数据。根据您的要求进行调整。

顺序顺序应用在并集之后,所以 在语句的末尾添加一个order by子句:

Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like '%a%'
Order By name

其他两个答案都是正确的,但我认为值得注意的是,我陷入困境的地方是没有意识到你需要按别名排序,并确保两个选择的别名是相同的…所以

select 'foo'
union
select item as `foo`
from myTable
order by `foo`

请注意,我在第一个选择中使用单引号,而在其他选择中使用反引号。

这样就能得到你需要的排序。

正如其他答案所述,在最后一个UNION之后的ORDER BY应该适用于由UNION连接的两个数据集。

我有两个使用不同表但相同列的数据集。上一个联盟之后的命令仍然没有起作用。

为ORDER BY子句中使用的列使用别名可以达到目的。

SELECT Name, Address FROM Employee 
UNION
SELECT Customer_Name, Address FROM Customer
ORDER BY customer_name;   --Won't work

解决方案是使用别名User_Name,如下所示:

SELECT Name AS User_Name, Address FROM Employee 
UNION
SELECT Customer_Name AS User_Name, Address FROM Customer
ORDER BY User_Name; 

只写

Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
Order by name

顺序被应用到完整的结果集