2009-10-06 83 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

相关问题