如何与工会订购
当数据来自多个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 By
在union
之后应用,因此只需在语句末尾添加一个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