2009-10-06 78 views
12

我有兩個表。Mysql計數返回0如果沒有找到記錄

cities - id_city, city_name 
properties - id_property, id_city, property_name 

我想顯示cities.city_name和旁邊[properties.count(id_city)]

如何進行查詢,如果不找到任何記錄,而不是NULL仍返回零,讓我得到的結果是這樣的:

London [123] 
New York [0] 
Berlin [11] 

其中「紐約」是[0],而不是NULL而不是1?

+0

你的問題不清楚.... – 2009-10-06 23:40:36

+0

你目前的查詢是什麼? – recursive 2009-10-06 23:45:10

+0

我盡力將它清理乾淨,所以清晰一些。 – 2009-10-06 23:45:37

回答

17

使用外連接:

select cities.city_name, count(properties.id_city) 
    from cities left join properties on cities.id_city = properties.id_city 
    group by 1 
+0

選擇城市。城市名稱,計數(*) 城市的左側加入屬性cities.id_city = properties.id_city group by 1 – Preston 2009-10-06 23:45:29

+0

這是錯的! 即使沒有匹配,它也會返回「1」的結果 – 2009-10-07 00:00:09

+0

嘗試計數(properties.id_property)而不是計數(*) – timdev 2009-10-07 00:06:02

1

查詢:

SELECT cities.*, COUNT(properties.id_city) as num 
FROM cities 
LEFT JOIN properties on cities.id_city=properties.id_city 
GROUP BY cities.id_city 

應該回到你想要它一個0計數,雖然我不是100%肯定它工作在MySQL那樣。

13

我想下面會爲你做,雖然我還沒有測試過它。訣竅是獲取一個表中的屬性計數,然後將該表連接到城市表,使用IFNULL函數將NULL轉換爲0。

SELECT city_name, IFNULL(property_count, 0) 
FROM cities 
LEFT JOIN 
    (SELECT id_city, count(*) as property_count 
    FROM properties 
    GROUP BY id_city) city_properties 
    USING (id_city); 
-2

簡單。使用「(Count(*)+ 0)」。任何null加0都會返回一個數字。

+0

但是如果列表中沒有創建條目,它不會返回0。 – Ben 2018-02-27 16:03:15

相關問題