Имеются две таблицы в mysql:
table1
-------
id
name
table2
-------
id
name
table1_id
filter
Необходимо сформировать такой запрос, который вернул бы все записи из первой таблицы с дополнительной колонкой, в которой рассчитывается количество записей во второй таблице, ссылающиеся на первую и при этом удовлетворяющие определенному фильтру). Следует учесть, что во второй таблице для конкретной записи из первой может либо не оказаться совсем ссылающихся на нее, либо они могут не удовлетворять фильтру и для таких записей должно проставляться 0.
Бьюсь уже несколько часов и не получается составить такой запрос.
SELECT DISTINCT
c.*,
COUNT(w.id) AS words_count
FROM table1 c
LEFT JOIN table2 w
ON (c.id = w.table1_id AND w.filter = 2)
GROUP BY w.table1_id
ORDER BY c.name;
Такой запрос не подойдет (я такой же и написал), т.к. он исключит записи из первой таблицы, на которую не ссылается ни одна из второй (смотрите мой комментарий к первому ответу)
select
t1.id,
t1.name,
ifnull(t2.count_table1_id, 0)
from table1 t1
left join (
select
table1_id,
count(*) as count_table1_id
from table2
group by table1_id
) t2 on t1.id = t2.table1_id