Проблема с join

esergey

Новичок
Проблема с join

Есть таблица городов
id | city

и таблица фирм

id | idcity | firm | status

Надо получить количество фирм в городе с учетом статуса, некоторые города содержат 0 фирм.

Использовал left join - работает, но когда добавляю условие where status=2 например выдает только те города в которых количество фирм не равно 0.

Подскажите, пожалуйста запрос?
 

dimagolov

Новичок
status is null or status=2

это правильно только если других статусов не бывает :)
 

esergey

Новичок
dimagolov

В этом случае не выводятся города где статус != 2 но он есть, напрмер status=1. А надо чтобы выводились города с количеством 0

Вот мой запрос:
SELECT city.*,COUNT(firm.namefirm) as '0' FROM city LEFT JOIN firm ON city.id=firm.idcity WHERE (firm.status=1 or firm.status=4 or status is null) GROUP BY city.id
 

Dl

Новичок
Автор оригинала: dimagolov
Dl, дирол, орбит?
Извиняюсь, может я не так понял вопрос, но по-моему
Код:
select t1.city, count(t2.firm) from city t1
left join firms t2 on (t2.id_city=t1.id and t2.status=2)
group by t1.city
дает более ожидаемый результат, нежели
Код:
select t1.city, count(t2.firm) from city t1
left join firms t2 on (t2.id_city=t1.id)
where t2.status=2
group by t1.city
Возможно я ошибаюсь.
 

Bitterman

Новичок
По-моему, Dl в данном случае прав.
Еще можно попробовать заменить COUNT на SUM(IF(t2.status = 2,1,0))
 

dimagolov

Новичок
ок, если вносим status=2 в условие join, то присоединяться строки, в которых status=2, то есть города, в которых нету фирм с таким статусом будут иметь строчку с null. тогда group by city.id даст то, что нужно.
 
Сверху