我有一个垂直表,其中有一个名称,除了其中一个被称为'其他'。我的任务是返回所有垂直列表,按字母顺序排序,除了'其他'在末尾。我已经完成了两个查询,例如:
String sqlMost = "SELECT * from core.verticals WHERE name != 'Other' order by name";
String sqlOther = "SELECT * from core.verticals WHERE name = 'Other'";
然后在我的代码中附加第二个结果。有没有办法在单个查询中执行此操作,而无需修改表?我尝试使用UNION
(select * from core.verticals where name != 'Other' order by name)
UNION (select * from core.verticals where name = 'Other');
但结果根本没有订购。我不认为第二个问题会对我的执行时间造成太大影响,但我还是有点好奇。
答案 0 :(得分:0)
UNION ALL
是请求简单连接的常用方法;没有ALL
的隐式DISTINCT
将应用于组合结果,这通常会导致排序。但是,单个子结果的UNION ALL
isn't required to preserve the order将作为简单连接;您需要ORDER
整体UNION ALL
表达式才能锁定订单。
另一种选择是计算整数订单覆盖列,如CASE WHEN name = 'Other' THEN 2 ELSE 1 END
,ORDER BY
该列后跟名称,完全避免UNION
。