2012-07-28 60 views
0

我想條款與工會運營商內部的選擇查詢即在內部選擇查詢使用與工會爲了

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

我可以通過完整的結果使用爲了使用訂單,但我希望有結果從按第一個查詢排序,然後按第二個查詢排序的結果。

請給我一些建議。

+0

您必須通過 – 2012-07-28 07:23:26

回答

0

下面應該做的......我想

select colname,1 as OrderCol from table where <cond1> 
union select colname,2 as OrderCol from table 
where <cond2> 
order by OrderCol 
+0

取下第一個查詢的訂單由於存在滿足條件1和條件2的一些記錄,所以導致另一個問題,所以這導致重複這些記錄,因爲它們現在不是唯一的OrderCol讓他們有不同的記錄。請給我們建議解決方案。 – 2012-07-30 07:18:42

+0

我不明白你爲什麼要使用聯合,如果你從同一個表中選擇數據。難道你不能寫簡單的選擇語句,並把它放在那裏。並使用select stmt中的不同項來忽略重複條目。 – 2012-07-30 07:43:06

+0

我必須使用union,因爲我需要優先考慮第二個條件中來自第一個條件的結果。 – 2012-07-30 08:48:31

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 
1

Order byunioned表的正確用法是

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兩個查詢權並保持其正確位置之前(第一查詢結果保留在頂部,而第二個查詢結果仍低於第一查詢

+0

由於存在一些記錄,導致另一個問題滿足條件1以及條件2,所以這導致這些記錄的重複,因爲它們現在不是唯一的,因爲OrderThis已經使它們具有不同的記錄。請您爲其提供解決方案。 – 2012-07-30 07:17:54