如何从UNION

时间:2015-05-26 16:52:07

标签: mysql sql union

我有这样的查询:

(select @number:=3) 
  union 
(select @number:=2) 
  union 
(select @number:=1) 
order by @number ASC

结果:

3
2
1

但我希望结果按升序排列,如下:

1
2
3

如何通过这样的查询按升序实现结果?

2 个答案:

答案 0 :(得分:2)

您可以将UNION包装在子查询中,试试这个:

SELECT *
FROM(
   SELECT @number := 3 AS number
   UNION
   SELECT @number := 2 AS number
   UNION
   SELECT @number := 1 AS number) tmp
ORDER BY number;

以下是SQL Fiddle示例。

编辑,解释发生了什么:

在您的示例中,MySQL将每个组视为自己的查询(这是您期望联合工作的方式),因此就好像您有三个不同的查询,而且只有第三个查询。< / p>

因此,通过将联合查询放在一起,您可以一个结果集,并且整个结果集都是正在排序的。

答案 1 :(得分:0)

这是您的查询:

(select @number:=3) 
  union 
(select @number:=2) 
  union 
(select @number:=1) 
order by @number ASC

您的order by有一个常数。它是order by "1" - @number是变量,而不是列名。因此,没有订购。您想要的是将数字指定为列名称:

select 3 as number
union all
select 2
union all
select 1
order by number;

您还应该使用union all代替union,除非您想要删除重复项的额外开销。