2014-09-30 3 views
0

죄송 서로-다른 결과를 덮어 동일한 쿼리에서 SELECT 여러 :더 나은 바로 코드로 이동 혼란 제목

샘플 테이블 :

|  key | value | MainLanguage  |  SubLanguage  | 
| mLangID |  5 |  default  |   en   | 
| mLangID |  3 |   esES  |   en   | 
| mTitle | Title |  default  |   en   | 
| mTitle | Título |   esES  |   es   | 

내가이 쿼리를 사용하지 않도록합니다 :

하나를 조합하고 두 번째 결과가 첫 번째 쿼리의 결과를 덮어 쓰지 않도록하는 등의 작업을 수행해야합니다. 또는 쉬운 경우 역방향 (두 번째 쿼리는 첫 번째 쿼리의 결과를 덮어 쓰고 세 번째 쿼리는 두 번째 쿼리를 덮어 씁니다.)

+0

'UNION' /'UNION ALL' – serakfalcon

답변

0

정확하게 이해하면 union allwhere 절을 사용하여 결과의 ​​우선 순위를 지정하십시오. key 당 하나의 행을 원한다고 생각합니다. 그렇다면이 방법이 유용 할 수도 있습니다.

SELECT * 
FROM translation.strings s 
WHERE MainLanguage = 'esES' AND lang = 'es' 
UNION ALL 
SELECT * 
FROM translation.strings s 
WHERE MainLanguage = 'esES' AND lang = 'en' AND 
     NOT EXISTS (select 1 
        from translation.strings s2 
        where s2.key = s.key and s2.MainLanguage = 'esES' AND s2.lang = 'es' 
       ) 
UNION ALL 
SELECT * 
FROM translation.strings s 
WHERE MainLanguage = 'default' AND lang = 'en' AND 
     NOT EXISTS (select 1 
        from translation.strings s2 
        where s2.key = s.key and 
         (s2.MainLanguage = 'esES' AND s2.lang = 'es' or 
         s2.MainLanguage = 'esES' AND s2.lang='en' 
         ) 
       ); 

참고 : 다른 데이터베이스에서이를 쉽게 해결할 수있는 방법이 있습니다.

1

UNION ALL을 사용하여 결과를 결합하면 중복 행이 제거되지 않습니다.