MySQL:从数据库中获取记录并向行添加COUNT()列

时间:2009-12-07 12:48:33

标签: mysql join count

我正在尝试从一张桌子中检索书籍,然后加入章节表。我从第二个表中需要的只是那些可用于这些书籍的章节的COUNT(),并将该值添加为一个名为章节(或其他内容)的额外列。

我目前的尝试看起来像这样: SELECT b。*,count(c.chapter_nr)作为章节FROM books作为b左连接章节c作为c.book_id = b.id

这只从books表中获取一个并将count()结果添加到该行,但是我想从books表中获取所有行,因此LEFT JOIN

4 个答案:

答案 0 :(得分: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子句,你将检索每本书所有章节的结果集。您只想将结果限制为独特的书籍及其相应的章节数。

答案 1 :(得分: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

答案 2 :(得分:1)

尝试:

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

如果书中没有章节,则返回0。

答案 3 :(得分: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.*