2012-09-23 141 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 

如果你希望你的数据也被另一列进行排序,你可以在年底这样添加它可能会帮你...