2013-07-03 197 views
2
SELECT t1.id, t1.name, t1.population, CAST(SUM(t2.town_1) AS CHAR) AS town, CAST(SUM(CASE WHEN t2.id LIKE 23 THEN 1 ELSE 0 END) AS CHAR) AS population FROM area1 t1 LEFT JOIN area2 t2 ON t1.id = t2.id WHERE t1.id like 23 

通常,如果兩個表中都存在id = 23,則匹配。但事實並非如此(不在t1表中),所以請求返回NULL值。
我怎麼做才能返回沒有結果?Mysql LEFT JOIN返回空值

+0

左連接返回第一個表的所有記錄,即使第二個表中沒有匹配的記錄。 –

+0

@Joe W問題=>在第一個表中沒有匹配的記錄 – OlZ

+0

對不起,我誤讀了那個 –

回答

7

如果您只想在兩個表中存在ID的情況下匹配結果,那麼您正在尋找INNER JOIN而不是LEFT JOIN。


編輯:

關於第二個想法,那是因爲你的聚合函數(SUM)。你把它們當作CHARs(甚至不知道你可以這麼做)。你應該使用GROUP BY。試試這個:

SQL Fiddle

SELECT 
    t1.id, 
    t1.name, 
    t1.population, 
    SUM(t2.town_1) AS town, 
    SUM(CASE WHEN t2.id LIKE 23 THEN 1 ELSE 0 END) AS population 
FROM 
    area1 t1 
    INNER JOIN area2 t2 
    ON t1.id = t2.id 
WHERE 
    t1.id like 23 
GROUP BY 
    t1.id, 
    t1.name, 
    t1.population 

在一個側面說明,沒有必要爲like您的WHERE子句。您擁有它的方式與=標誌的做法相同。

+0

它返回NULL值與INNER JOIN太 – OlZ

+0

@OlZ:查看更新的答案。 – Travesty3

+0

它沒有處理我的數據,但你的小提琴說你是對的。 – OlZ