Я пытаюсь извлечь книги из одной таблицы и оставить их в таблице глав. То, что мне нужно из второй таблицы, - это только COUNT() разделов, доступных для этих книг, и добавьте это значение в качестве дополнительного столбца, называемого главами (или что-то еще).
Моя текущая попытка выглядит так:
SELECT b. *, Count (c.chapter_nr) в виде разделов FROM books
как b левых разделов в виде c на c.book_id = b.id
Это получает только один из таблицы книг и добавляет результат count() в эту строку, но я бы хотел получить ВСЕ строки из таблицы книг, следовательно LEFT JOIN
SELECT b.*, count(c.chapter_nr) as chapters
FROM books as b
LEFT JOIN chapters as c on (c.book_id = b.id)
GROUP BY b.id
Вам нужно сгруппировать по книге, чтобы определить фактические подсчеты глав. Если вы хотите оставить предложение GROUP BY, вы получите список результатов всех глав каждой книги. Вы просто хотите ограничить результаты уникальными книгами и их соответствующими графами.
У вас отсутствует предложение GROUP BY:
SELECT b.*, count(c.chapter_nr) as chapters
FROM books AS b
LEFT JOIN chapters AS c ON c.book_id = b.id
GROUP BY b.id
Попробуйте:
SELECT b.*,
(select count(*) from chapters c where c.book_id = b.id) as chapters
FROM books b
Это вернет 0, если для книги нет разделов.
Неподтвержденный, но вам нужно предложение "group by", чтобы сделать то, что вы хотите:
Select b.*, count(*) as chapters
from books b left outer join chapters c
on c.book_id = b.id
group by b.*
count(*)
на count(c.chapter_nr)
для подсчета количества глав (строк с ненулевым chapter_nr
).
chapter_nr
атрибут глав (например,chapter_nr
), вы получите счет 0 для книги без глав.