如何与工会订购

当数据来自多个select并将其联合在一起时,是否有可能进行sorting

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 

但在这种情况下,我只是忽略这个解决scheme。

先谢谢你。

只要写

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

order by将应用于完整的结果集

 Select id,name,age from ( Select id,name,age From Student Where age < 15 Union Select id,name,age From Student Where Name like "%a%" ) results order by name 

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

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

请注意,我在第一个select中使用了单引号,但是为其他人使用了单引号。

这将让你sorting你需要的。

为了使这种sorting只适用于UNION中的第一条语句,你可以把它放在UNION ALL子查询中(这些在Oracle中都是必须的):

 Select id,name,age FROM ( Select id,name,age From Student Where age < 15 Order by name ) UNION ALL Select id,name,age From Student Where Name like "%a%" 

或者(解决Nicholas Carey的评论),你可以保证顶部的SELECT是有序的,结果会出现在底部的SELECT之上,如下所示:

 Select id,name,age, 1 as rowOrder From Student Where age < 15 UNION Select id,name,age, 2 as rowOrder From Student Where Name like "%a%" Order by rowOrder, name 

如果我想只在UNION的一个上应用sorting,如果使用Union all:

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

Order Byunion之后应用,因此只需在语句末尾添加一个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