我正在尝试从一张桌子中检索书籍,然后加入章节表。我从第二个表中需要的只是那些可用于这些书籍的章节的COUNT(),并将该值添加为一个名为章节(或其他内容)的额外列。
我目前的尝试看起来像这样:
SELECT b。*,count(c.chapter_nr)作为章节FROM books
作为b左连接章节c作为c.book_id = b.id
这只从books表中获取一个并将count()结果添加到该行,但是我想从books表中获取所有行,因此LEFT JOIN
答案 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.*