我想顯示結果中第一行爲region ='sample'的行。我的意思是優先級必須高於另一行,並且它們必須位於頂部。SQL語句優化問題
我爲此結果使用下面的SQL。
SELECT * FROM works Where region = 'sample' UNION Select * FROM works Where region <> 'sample'
有沒有任何優化的方式來獲得沒有UNION的結果?
我想顯示結果中第一行爲region ='sample'的行。我的意思是優先級必須高於另一行,並且它們必須位於頂部。SQL語句優化問題
我爲此結果使用下面的SQL。
SELECT * FROM works Where region = 'sample' UNION Select * FROM works Where region <> 'sample'
有沒有任何優化的方式來獲得沒有UNION的結果?
首先聯盟不保證訂單。即使你這樣做,也有可能沒有按照正確的順序。所以你必須用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
您可以使用order
:
order by case when region = 'sample' then 1 else 2 end, othercolumn
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
如果你希望你的數據也被另一列進行排序,你可以在年底這樣添加它可能會幫你...
+1的索引。 –