Вот мой простой вопрос SQL...
У меня есть две таблицы:
Книги
-------------------------------------------------------
| book_id | author | genre | price | publication_date |
-------------------------------------------------------
Заказы
------------------------------------
| order_id | customer_id | book_id |
------------------------------------
Я хотел бы создать запрос, который возвращает:
--------------------------------------------------------------------------
| book_id | author | genre | price | publication_date | number_of_orders |
--------------------------------------------------------------------------
Другими словами, верните каждый столбец для строк ВСЕ в таблице "Книги" вместе с вычисленным столбцом с именем "number_of_orders" , который подсчитывает количество раз, когда каждая книга отображается в таблице "Заказы". (Если книга не встречается в таблице заказов, в результирующем наборе должна быть указана книга должна, но "number_of_orders" должна быть ноль.
До сих пор я придумал следующее:
SELECT
books.book_id,
books.author,
books.genre,
books.price,
books.publication_date,
count(*) as number_of_orders
from books
left join orders
on (books.book_id = orders.book_id)
group by
books.book_id,
books.author,
books.genre,
books.price,
books.publication_date
Это почти правильно, но не совсем так, потому что "number_of_orders" будет равно 1, даже если книга никогда не указана в таблице Orders. Более того, учитывая мой незнание SQL, я уверен, что этот запрос очень неэффективен.
Какой правильный способ написать этот запрос? (Для чего это стоит, это должно работать на MySQL, поэтому я не могу использовать другие функции, специфичные для вендора).
Спасибо заранее!