Подтвердить что ты не робот

Mysql count return Zero, если запись не найдена

У меня есть две таблицы.

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?

4b9b3361

Ответ 1

Используйте внешнее соединение:

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

Ответ 2

Я думаю, что следующее будет сделано для вас, хотя я его не тестировал. Хитрость заключается в том, чтобы получить счетчики свойств в одной таблице, а затем влево соединить эту таблицу с таблицей городов, конвертируя NULL в 0 с помощью IFNULL.

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);

Ответ 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.

Ответ 4

Simple. Используйте "(Count (*) + 0)". Любой нуль плюс 0 вернет число.