2011-12-03 28 views
2

如果給定字段的值爲NULL,我希望完全發送另一個查詢是否有可能?另一個選擇語句,如果值爲NULL

事情是這樣的:

IF the value is null 
     SELECT * FROM `locations` 
    ELSE 
     SELECT * FROM `companies` 
    ENDIF 

我想用這個查詢的輸出在另一個查詢。所以它會是這樣的。如果該字段在第一個表中不爲空,則請從另一個表中取另一個字段,最後從此if的結果中取出另一個查詢。

+0

什麼編程語言?普通的MySQL? –

+0

我正在使用PHP。但是需要用普通的SQL進行編碼,因爲這將是一個虛擬的Field。 –

回答

4
SELECT * FROM `locations` WHERE 1 = (CASE WHEN value IS NULL THEN 1 ELSE 0 END) 
UNION ALL 
SELECT * FROM `companies` WHERE 1 = (CASE WHEN value IS NOT NULL THEN 1 ELSE 0 END) 

未測試,但應該工作。

+0

看起來不錯,但我需要檢查該字段是否存在於第二個查詢中。我想這是不可能與MYSQL WHERE語句。 –

0
SELECT 
    CASE WHEN L.value IS NULL THEN C.x ELSE L.x END AS x, 
    CASE WHEN L.value IS NULL THEN C.y ELSE L.y END AS y, 
    CASE WHEN L.value IS NULL THEN C.z ELSE L.z END AS z, 
    ... 
FROM 
    locations L 
    LEFT JOIN companies C 
     ON L.LocationID=C.LocationID; 

我不知道你怎麼會有加入你的表在你的情況,但是這給你的,你如何解決這個問題的想法。在我的解決方案中,決定這些字段是從地點還是公司採取的,是逐條記錄的。

0

如果我明白,你想在一次調用中使用不同的表定義來檢索一個或另一個查詢,如果某項爲空?我認爲是不是一個好的做法...

使用的mysqli和存儲過程,你可以閱讀的最後選擇執行,但奇怪的是:

DELIMITER // 
CREATE PROCEDURE make_weird_query() BEGIN 
    IF something is null THEN 
     SELECT * FROM `locations`; 
    ELSE 
     SELECT * FROM `companies`; 
    ENDIF; 
END;// 

在PHP:

$query = $mysql->query("CALL make_weird_query()"); 
while($row = $query->fetch_assoc()){ 
    // ... 
} 
1

類似aleroot的貢獻,但避免(恕我直言)醜陋的情況:(也未經測試)

SELECT * FROM (SELECT * FROM locations WHERE value IS NULL) 
UNION ALL 
SELECT * FROM (SELECT * FROM companies WHERE value IS NOT NULL) 
相關問題