我有这样的查询:
(select @number:=3)
union
(select @number:=2)
union
(select @number:=1)
order by @number ASC
结果:
3
2
1
但我希望结果按升序排列,如下:
1
2
3
如何通过这样的查询按升序实现结果?
答案 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
,除非您想要删除重复项的额外开销。