14

我有两张桌子。

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?

4

4 回答 4

23

我认为以下内容会为您完成,尽管我尚未对其进行测试。诀窍是在一个表中获取属性计数,然后将该表左连接到城市表,使用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);
于 2009-10-07T00:25:01.153 回答
22

使用外连接:

select cities.city_name, count(properties.id_city)
  from cities left join properties on cities.id_city = properties.id_city
  group by 1
于 2009-10-06T23:41:01.253 回答
3

查询:

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 中以这种方式工作。

于 2009-10-07T00:07:38.713 回答
-4

简单的。使用“(计数(*)+ 0)”。任何 null 加 0 都将返回一个数字。

于 2017-02-09T18:03:05.170 回答