2011-05-10 45 views
4

給定兩個子查詢表t1和t2,當且僅當t1返回空行時,如何返回t2?Mysql - 當且僅當第一個子查詢返回空時才使用輔助子查詢

編輯:新增例如

T1

SELECT * 
    FROM common_table 
WHERE language_id = 1 

T2

SELECT * 
    FROM common_table 
WHERE language_id = 2 

基本上就是我做的是,在情況下,T1返回空行,我會把它想執行T2並返回這些行。現在,我完全意識到我可以在PHP中執行此操作,但查詢是一個子查詢,我寧願讓SQL處理它(SQL代碼)。

+1

SQL是不是一種編程語言。 – zerkms 2011-05-10 03:09:57

+1

你能發佈你想修改的實際SQL語句嗎? – Juliet 2011-05-10 03:10:35

+0

@Juliet加了個例子 – arvinsim 2011-05-10 03:14:52

回答

2

在MSSQL中,我可以做這樣的事情

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 

應在MySQL或相同類似

+0

雖然不是sql,但它是t-sql。 – zerkms 2011-05-10 03:42:13

+0

這個問題具體說明了mysql,但這在mysql中不起作用。有趣的知道,但不知道爲什麼它是公認的答案。 – 2014-09-12 21:16:03

1

我的MySQL知識是有點生疏了,我認爲這應該工作。

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)OR(language_id = 2 AND NOT EXISTS(從NULL刪除common_table WHERE language_id = 1))'。在我的測試中,如果有任何lang_id'1記錄,則所有'lang_id'2都會給出,EXISTS可能比COUNT更有效。 – pilcrow 2011-05-10 04:02:55

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 
        ); 
相關問題