Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:从数据库中获取记录并向行中添加COUNT()列_Mysql_Join_Count - Fatal编程技术网

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

MySQL:从数据库中获取记录并向行中添加COUNT()列,mysql,join,count,Mysql,Join,Count,我试图从一个表中检索书籍,并将其左键连接到chapters表。从第二个表中,我需要的只是这些书籍可用章节的COUNT(),并将该值添加为一个名为chapters(或其他内容)的额外列 我当前的尝试如下所示: 选择b.*,将(c.chapter\u nr)作为书籍中的章节计数为b,将章节作为c.book\u id=b.id上的c左键连接 这只从books表中获取一行,并将count()结果添加到该行,但我希望从books表中获取所有行,因此使用左连接 SELECT b.*, count(c.cha

我试图从一个表中检索书籍,并将其左键连接到chapters表。从第二个表中,我需要的只是这些书籍可用章节的COUNT(),并将该值添加为一个名为chapters(或其他内容)的额外列

我当前的尝试如下所示: 选择b.*,将(c.chapter\u nr)作为
书籍中的章节计数为b,将章节作为c.book\u id=b.id上的c左键连接

这只从books表中获取一行,并将count()结果添加到该行,但我希望从books表中获取所有行,因此使用左连接

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
解释 为了确定实际的章节数,您需要按书籍进行分组。如果省略GROUPBY子句,则将检索每本书所有章节的结果集。您只需要将结果限制为唯一的书籍及其相应的章节数

未测试,但您需要一个“group by”子句来执行您想要的操作:

Select b.*, count(*) as chapters
from books b left outer join chapters c
on c.book_id = b.id
group by b.*

您缺少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
尝试:


如果一本书没有章节,这将返回0。

左外部联接方法的问题是,即使没有使用左外部联接方法的章节行,只要计算章节的不可空属性(如
chapter\u nr
),它们也会返回最小计数1,对于没有章节的书籍,您将得到0的计数。对于没有章节的书籍,这将返回1作为章节数。将
count(*)
更改为
count(c.chapter\u nr)
以计算章节数(非空
chapter\u nr
)。
SELECT b.*,  
(select count(*) from chapters c where c.book_id = b.id) as chapters   
FROM books b