可以在单个查询中将一个结果集连接到另一个结果集吗?

时间:2016-01-28 01:30:43

标签: postgresql

我有一个垂直表,其中有一个名称,除了其中一个被称为'其他'。我的任务是返回所有垂直列表,按字母顺序排序,除了'其他'在末尾。我已经完成了两个查询,例如:

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');

但结果根本没有订购。我不认为第二个问题会对我的执行时间造成太大影响,但我还是有点好奇。

1 个答案:

答案 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 ENDORDER BY该列后跟名称,完全避免UNION