2016-02-24 68 views
0

我想知道如何處理SQL比較而不重做語句中的相同查詢兩次。 以下是我在尋找:SQL:在相同的條件輸出中使用條件結果

SELECT columnName10, 
IF(SELECT columnName20 
    FROM OtherExampleTable 
    WHERE id = 15 IS NULL, 'nothing', SELECT columnName20 
             FROM OtherExampleTable 
             WHERE id = 15 
    ) AS AliasColumn 
FROM ExampleTable 

正如你所看到的,查詢SELECT columnName20 FROM OtherExampleTable WHERE ID = 15由2倍。

如何在不重複查詢的情況下做同樣的事情?

謝謝你們。

+0

你想它,因爲可讀性/可維護性,或因的表現呢? –

+0

,因爲做無用的編程對我來說是邪惡的:) 所以我猜的性能。 – Apex

+0

您是否有實際的性能問題?因爲如果是這樣,請嘗試找到瓶頸並解決該問題。很多時候它不是你認爲的地方。如果您沒有性能問題,請不要嘗試修復它們。 [記住優化規則](http://c2.com/cgi/wiki?RulesOfOptimization)。這就是說,優化這個可讀性*是一個好主意,所以如果例如子查詢的WHERE子句發生變化,你只需要改變一個部分。 –

回答

1

你可以使用COALESCE

SELECT column10, COALESCE(
    (SELECT columnName10 
    FROM OtherExampleTable WHERE id=15), 'nothing') 
FROM ExampleTable; 
1

嘗試這個

SELECT columnName10, 
IFNULL(SELECT columnName20 
    FROM OtherExampleTable 
    WHERE id = 15 LIMIT 1,'nothing') AS AliasColumn  
FROM ExampleTable; 

在此查詢還寫LIMIT 1如果idprimary key

+0

如果具有'id = 15'的記錄不存在,這不會使'AliasColumn'爲NULL嗎? –

+0

@BartFriederichs謝謝...我明白了會發生什麼問題,我正在改變我的查詢 –

+0

好吧,再次閱讀OP的問題,似乎他的查詢也是如此。不知道這是不是想要的行爲。 –

1

兩個解決方案。

使用IFNULL()

SELECT columnName10, 
IFNULL(SELECT columnName20 
     FROM OtherExampleTable 
     WHERE id = 15, 'nothing') AS AliasColumn 
FROM ExampleTable 

使用用戶變量

SELECT columnName10, 
IF(@value IS NULL, 'nothing', @value:=(SELECT columnName20 
             FROM OtherExampleTable 
             WHERE id = 15) 
    ) AS AliasColumn 
FROM ExampleTable