我想显示结果中第一行为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的索引。 –