2011-05-10 4 views
4

두 개의 하위 쿼리 테이블 t1과 t2가있는 경우 t1이 빈 행을 반환하는 경우에만 어떻게 t2를 반환 할 수 있습니까?Mysql - 첫 번째 하위 쿼리가 비어있는 경우에만 보조 하위 쿼리 사용

편집 : 추가 예

T1

SELECT * 
    FROM common_table 
WHERE language_id = 1 

T2 내가 무엇을하고 있는가하는 경우에는 T1 반환 빈 행, 나는 그것을 좋아하는 것입니다 기본적으로

SELECT * 
    FROM common_table 
WHERE language_id = 2 

T2를 실행하고 해당 행을 리턴하십시오. 이제는 PHP에서이 작업을 수행 할 수 있다는 것을 알고 있지만 쿼리가 하위 쿼리이므로 SQL (이 아닌 PHP) 코드가 처리하도록합니다.

+1

SQL 프로그래밍 언어가 아닙니다. – zerkms

+1

수정하려는 실제 SQL 문을 게시 할 수 있습니까? – Juliet

+0

@Juliet는 예제를 – arvinsim

답변

2

MSSQL에서 나는

+0

추가했지만 SQL은 아니지만 t-sql입니다. – zerkms

+0

이 질문은 mysql을 구체적으로 언급하고 있지만, mysql에서는 작동하지 않습니다. 흥미롭지 만, 왜 그것이 받아 들여지는 대답인지는 모르겠다. –

1

내 MySQL의 지식은 MySQL에서 동일하거나 유사해야

If EXISTS (SELECT * FROM common_table WHERE language_id = 1) 
BEGIN 
    SELECT * FROM common_table WHERE language_id = 1 
END ELSE BEGIN 
    SELECT * FROM common_table WHERE language_id = 2 
END 

뭔가를 할 수있는 것은 약간 녹슨 내가이 일을한다고 생각합니다.

SELECT * FROM common_table 
     WHERE language_id = 2 and 
       0 = (SELECT count(*) FROM common_table 
            WHERE language_id = 1 
        ) ; 
+0

+1 개선 사항은 '... WHERE (language_id = 1) 또는 (language_id = 2 AND NOT EXISTS (SELECT NULL FROM common_table WHERE language_id = 1))'입니다. 내 테스트에서'lang_id' 1 레코드가 있으면 그 값을,'lang_id' 값을 2로 지정하면 EXISTS가 COUNT보다 더 효율적일 수 있습니다. – pilcrow

3
Select ... 
From common_table 
Where language_id = 1 
    Or (
     language_id = 2 
     And Not Exists (
         Select 1 
         From common_table 
         Where language_id = 1 
         ) 
     ) 
0
SELECT * 
    FROM common_table 
WHERE language_id = 1 
UNION 
SELECT * 
    FROM common_table 
WHERE language_id = 2 
     AND NOT EXISTS (
         SELECT * 
         FROM common_table AS T2 
         WHERE T2.language_id = 1 
        );