我想在带有union运算符的内部选择查询中使用order by子句,即
select colname from table where <cond1> order by colname
union
select colname from table where <cond2> order by colname
我可以使用order by完整的结果,但我希望得到第一个查询排序的结果,然后排序第二个查询的结果。
请给我一些建议。
答案 0 :(得分:1)
Order by
表中unioned
的正确用法是
select colname from table where <cond1>
union
select colname from table where <cond2> order by colname
上述代码的解释是,在两个查询合并后,然后排序基于列名。在服务器将第一个查询与第一个查询联合之前,不先排序较低的查询。但是有一个替代方案,你需要将它包装在一个子查询中。
SELECT newTable.colname
FROM
(
select colname, 1 as OrderThis from table where <cond1>
union
select colname, 2 as OrderThis from table where <cond2>
) newTable
Order by newTable.OrderThis, newTable.colname
如果我的想法正确,您希望在union
两个查询正确并保持其正确位置之前先对列进行排序(第一个查询结果保持在顶部,而第二个查询结果保持在下方第一个查询)
答案 1 :(得分:0)
以下应该......我猜
select colname,1 as OrderCol from table where <cond1>
union select colname,2 as OrderCol from table
where <cond2>
order by OrderCol
答案 2 :(得分:0)
这可能会成功
SELECT * FROM ( SELECT colname FROM table1 where <cond1> order by colname ) DUMMY_ALIAS1
UNION ALL
SELECT * FROM ( SELECT colname FROM table2 where <cond2> order by colname ) DUMMY_ALIAS2