2014-09-10 77 views
0

在下面的sql中,爲什麼不會合並工作,甚至是null?因爲左邊的加入,它有什麼要做的嗎?爲什麼不會合並或爲空工作結果從左連接?

在這種情況下,子查詢不會返回任何行。一世。表amgb中不存在e itemId = 'US1'

我MySql上5.5.25在Windows 7 64

SELECT a.itemName, 
    (SELECT coalesce(itemImageName,'default.jpg') // always null 
    FROM amgb b 
    WHERE a.userId = b.userId AND a.itemId = b.itemId 
    LIMIT 1 
) AS itemImageName 
FROM amga a 
WHERE a.userId = 1 AND a.itemId = 'US1'; 

(SELECT if(itemImageName IS null,'default.jpg',itemImageName) // always null 
+0

您的第二個查詢似乎使用先前查詢中的別名,因此可能是問題。 – SamHuckaby 2014-09-10 14:17:45

+1

請閱讀[這篇文章](http://meta.stackoverflow.com/questions/271055/tips-for-asking-a-good-structured-query-language-sql-question/271056#271056)我寫了如何要問一個適當的問題,它會幫助你得到更準確,更快的答案 – 2014-09-10 14:20:29

回答

3

它總是NULL是因爲COALESCE裏面的子查詢的原因。而是像這樣將其移動到外部:

SELECT a.itemName, 
    COALESCE((SELECT itemImageName 
    FROM amgb b 
    WHERE a.userId = b.userId AND a.itemId = b.itemId 
    LIMIT 1 
), 'default.jpg') AS itemImageName 
FROM amga a 
WHERE a.userId = 1 AND a.itemId = 'US1';