У меня вопрос о подсчете в подзапросе в базе данных mysql. Предположим, у меня есть таблица book
которой есть author_id
и таблица author
с id
и name
. Я хочу получить список авторов с количеством книг для каждого автора. Поэтому я использую этот запрос:
SELECT a.id as id, a.name as name,
(SELECT COUNT(*) FROM book b WHERE b.author_id = a.id) as count
From author a
Это работает без проблем. Но я хочу знать, является ли это решение лучшим и оптимизированным решением для таких примеров? Если нет, есть ли лучший способ решения этих проблем?
Спасибо за Ваше внимание.
Вы можете использовать join
и group by
так как вам нужно будет объединять данные при подсчете количества книг, написанных каждым автором.
SELECT a.id AS id, a.name AS name, count(b.id) AS 'count' FROM author a
LEFT JOIN BOOK b ON b.author_id = a.id
GROUP BY a.id, a.name;
Использование left join
будет лучше, если не все авторы имеют книги в таблице книг, иначе inner join
будет оптимальным. INNER JOIN vs LEFT JOIN производительность в SQL Server