2011-11-03 22 views
0

我想對MySQL進行復合查詢。如果union的第一部分爲空,我想返回null;否則,我想返回聯盟的結果。例如:如果第一部分爲空或返回結果,複合MySQL查詢返回null

IF(select * (select * from t1) as result, result UNION (select * from t2), ""); 

我的代碼行不起作用。我得到以下錯誤:

Operand should contain 14 column(s) 

有沒有人有任何想法如何做到這一點正確?

感謝下面的第一個答覆,但它看起來過於昂貴:

(SELECT * FROM t1) 
UNION 
(SELECT * FROM t2 
WHERE EXISTS 
    (SELECT * FROM t1) 
) 

我的理由是T1其實是一堆被聯合聲明本身。有沒有辦法使用類似於別名的東西?下面的示例失敗,因爲別名「result」不是通過UNION關鍵字執行的。

SELECT * FROM(大化合物選擇語句)AS結果 UNION (SELECT * FROM T2 WHERE EXISTS (SELECT 1 FROM結果) )

感謝。

+0

如果顯示整個查詢可能會有所幫助。 – FrustratedWithFormsDesigner

+0

_你是什麼意思_「工會的第一部分是空的_ _?你的意思是該查詢返回零行? – Marco

回答

2
(SELECT * FROM t1) 
UNION 
(SELECT * FROM t2 
    WHERE EXISTS 
     (SELECT * FROM t1) 
) 
+0

+1建議列明確列出而不是'SELECT *' –

+0

感謝您的回覆,但它看起來太貴了。我的理由是,t1實際上是一大堆UNIONed語句本身。有沒有辦法使用類似於別名的東西?下面的示例失敗,因爲別名「result」不是通過UNION關鍵字執行的。 SELECT * FROM(大化合物選擇語句)AS結果 UNION (SELECT * FROM T2 WHERE EXISTS (SELECT 1 FROM結果) ) 感謝。 – tribal