MySQL: получить записи из базы данных и добавить столбец COUNT () в строки

0

Я пытаюсь извлечь книги из одной таблицы и оставить их в таблице глав. То, что мне нужно из второй таблицы, - это только COUNT() разделов, доступных для этих книг, и добавьте это значение в качестве дополнительного столбца, называемого главами (или что-то еще).

Моя текущая попытка выглядит так: SELECT b. *, Count (c.chapter_nr) в виде разделов FROM books как b левых разделов в виде c на c.book_id = b.id

Это получает только один из таблицы книг и добавляет результат count() в эту строку, но я бы хотел получить ВСЕ строки из таблицы книг, следовательно LEFT JOIN

Теги:
join
count

4 ответа

3
Лучший ответ
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, вы получите список результатов всех глав каждой книги. Вы просто хотите ограничить результаты уникальными книгами и их соответствующими графами.

3

У вас отсутствует предложение 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
1

Попробуйте:

SELECT b.*,  
(select count(*) from chapters c where c.book_id = b.id) as chapters   
FROM books b

Это вернет 0, если для книги нет разделов.

  • 0
    Проблема с левыми внешними методами соединения состоит в том, что они будут иметь тенденцию возвращать минимальное количество, равное 1, даже если нет строк главы
  • 1
    С левыми внешними методами соединения, если вы chapter_nr атрибут глав (например, chapter_nr ), вы получите счет 0 для книги без глав.
Показать ещё 1 комментарий
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.*
  • 0
    Это вернет 1 как количество глав для книг, которые не имеют глав. Измените count(*) на count(c.chapter_nr) для подсчета количества глав (строк с ненулевым chapter_nr ).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню