在内部选择查询中使用with with with order

时间:2012-07-28 07:20:44

标签: mysql sql

我想在带有union运算符的内部选择查询中使用order by子句,即

select colname from table where <cond1> order by colname 
union
select colname from table where <cond2> order by colname 

我可以使用order by完整的结果,但我希望得到第一个查询排序的结果,然后排序第二个查询的结果。

请给我一些建议。

3 个答案:

答案 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