2012-09-23 6 views
1

결과에서 첫 번째 행으로 region = 'sample'이있는 행을 표시하려고합니다. 우선 순위는 다른 행보다 높아야하며 꼭대기에 있어야합니다.SQL 문 최적화 문제

이 결과를 위해 아래의 SQL을 사용합니다.

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

UNION없이 결과를 얻는 가장 좋은 방법이 있습니까?

답변

1

우선 연합의 명령을 보장하지 않습니다. 당신이 그것을 좋아한다고하더라도, 올바른 순서로 있지 않을 가능성이 있습니다. 따라서 order by 절을 사용해야합니다.

쉬운 당신이 문제의 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에 인덱스가있는 경우

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

더 나은. –

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 

,이 같은 말에 추가 할 수 있습니다 그것이 당신을 도울 수 있습니다 ...