Ответ 1
Используйте внешнее соединение:
select cities.city_name, count(properties.id_city)
from cities left join properties on cities.id_city = properties.id_city
group by 1
У меня есть две таблицы.
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?
Используйте внешнее соединение:
select cities.city_name, count(properties.id_city)
from cities left join properties on cities.id_city = properties.id_city
group by 1
Я думаю, что следующее будет сделано для вас, хотя я его не тестировал. Хитрость заключается в том, чтобы получить счетчики свойств в одной таблице, а затем влево соединить эту таблицу с таблицей городов, конвертируя 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);
Запрос:
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.
Simple. Используйте "(Count (*) + 0)". Любой нуль плюс 0 вернет число.