2016-11-26 2 views
0

하나의 쿼리에서 달성하고자하는 것은 특정 조건과 일치하는 레코드의 ID를 반환하는 것이고, 아무 것도 발견되지 않으면 다른 조건입니다. 그래서이 두 기준은 우선 순위가 다르며 단순한 '또는'은하지 않습니다.우선 순위가 다른 두 쿼리의 결과를 반환하는 SQL 쿼리

나는 두 가지 해결책을 들어 왔지만이 간단하게 할 수 있는지 궁금 :

select id,1 as n from <tablename> where <criterion1> 
    union select id,2 as n from <tablename> where <criterion2> 
    order by n asc limit 1; 

나 : 내가 원하는 것 무엇

select coalesce ((select id from <tablename> where <criterion1>), 
       (select id from <tablename> where <criterion2>)); 

두의 communalities을 반복해야하지입니다 쿼리 (사실 더 많은 열을 선택하므로이를 병렬로 유지해야합니다). 두 쿼리 모두 동일한 테이블에 관련됩니다.

지름길이있는 경우 이에 대해 배우게되어 기쁩니다. 당신은 하나 개의 행을 원하는 경우

답변

0

, order bylimit 사용

select t.* 
from t 
where <criterion1> or <criterion2> 
order by (case when <criterion1> then 1 else 2 end) 
limit 1; 
+0

이 좋아,이 내가 바르를 복제 할 필요가없는 장점은했지만, 난 기준을 위해 그렇게해야합니다. 나는 하나 또는 다른 것을해야만한다. – user52366