查询的结果是没有顺序的,除非你使用了一个order by
子句(或者在 MySQL 中是一个group by
子句)。试试这个来得到你想要的:
(SELECT `size`, `type` FROM `table` WHERE `type`='a')
UNION ALL
(SELECT `size`,`type` FROM `table` WHERE `type`='b')
order by type,
(case when `type` = 'a' then size end) asc,
(case when `type` = 'b' then size end) desc;
子查询上的排序子句通常被忽略(例外是当你有 时limit
)。而且,即使不被忽略也可能不会对外部查询产生影响。
实际上,union all
完全忘记:
select size, `type`
from table
where type in ('a', 'b')
order by type,
(case when `type` = 'a' then size end) asc,
(case when `type` = 'b' then size end) desc;
type
子句中的第一个order by
是不必要的,但我确实认为它使排序的意图更清楚。