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

Postgresql 是否可以在单个查询中将一个结果集连接到另一个结果集?,postgresql,Postgresql,我有一个有名字的垂直表,除了其中一个叫做“其他”。我的任务是返回所有垂直的列表,按字母顺序排序,除了末尾有“Other”之外。我通过两个查询完成了这项工作,如下所示: String sqlMost = "SELECT * from core.verticals WHERE name != 'Other' order by name"; String sqlOther = "SELECT * from core.verticals WHERE name = 'Other'"; 然后将第二个结果附

我有一个有名字的垂直表,除了其中一个叫做“其他”。我的任务是返回所有垂直的列表,按字母顺序排序,除了末尾有“Other”之外。我通过两个查询完成了这项工作,如下所示:

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

但结果一点也不有序。我不认为第二个查询会对我的执行时间造成太大的影响,但我有点好奇,如果没有其他问题的话。

UNION all
是请求简单连接的常用方法;如果没有
ALL
,则对组合结果应用隐式
DISTINCT
,这通常会导致排序。但是,
将单个子结果的所有
合并为一个简单的连接将:;您需要
ORDER
整个
UNION-ALL
表达式来锁定订单


另一个选项是计算一个整数顺序覆盖列,如当name='Other'时,CASE,然后2 ELSE 1 END,以及
排序,该列后跟name,完全避免了
联合

感谢您的快速回答!我已经想到了您的第二个答案(虽然不是自动设置值的情况),但不知道是否可以使用现有的表定义来完成。相应地编辑了我的原始问题。re:你的第一个建议是,对工会进行排序不就是把“其他人”放回阿尔法顺序吗?我只是尝试了没有整体排序的UNION ALL,它实现了我想要的,但是如果不能保证,那么我就不能指望它。你需要合成列来保证你所寻找的特殊排序。不过,您可以在查询中这样做,而无需修改基表。