2012-09-23 167 views
1

我想顯示結果中第一行爲region ='sample'的行。我的意思是優先級必須高於另一行,並且它們必須位於頂部。SQL語句優化問題

我爲此結果使用下面的SQL。

SELECT * FROM works Where region = 'sample' UNION Select * FROM works Where region <> 'sample' 

有沒有任何優化的方式來獲得沒有UNION的結果?

回答

1

首先聯盟不保證訂單。即使你這樣做,也有可能沒有按照正確的順序。所以你必須用order by子句來做。

select * from work order by case when region='sample' then 0 else 1 end 

更好,如果你有觀察到的問題UNION不保證所需的順序區域

select *,0 as ordb from work where region = 'sample' 
union 
select *,1 as ordb from work where region <> 'sample' 
order by ordb 
+0

+1的索引。 –

7

您可以使用order

order by case when region = 'sample' then 1 else 2 end, othercolumn 
1
SELECT * FROM works 

order by case region when 'sample' then 1 else 2 end; 

SELECT * FROM works 
order by case when region = 'sample' then 1 else 2 end 

如果你希望你的數據也被另一列進行排序,你可以在年底這樣添加它可能會幫你...