如何以优化的方式在子查询中选择COUNT

问题描述 投票:0回答:1

我有一个关于mysql数据库中子查询计数的问题。假设我有一个book表,有author_idauthor表与idname。我想获得作者列表,其中包含每位作者的书籍数量。所以我使用这个查询:

SELECT a.id as id, a.name as name,
(SELECT COUNT(*) FROM book b WHERE b.author_id = a.id) as count
From author a

这没有任何问题。但我想知道,这个解决方案是否是针对此类示例的最佳解决方案?如果没有,这些问题有没有更好的解决方法?

感谢您的关注。

mysql database subquery
1个回答
1
投票

您可以使用joingroup by,因为在计算每位作者撰写的书籍数量时,您需要汇总数据。

SELECT a.id AS id, a.name AS name, count(b.id) AS `count` FROM author a
LEFT JOIN BOOK b ON b.author_id = a.id
GROUP BY a.id, a.name;

使用left join会更好,如果不是所有作者都在书表中有书,否则inner join将是最佳的INNER JOIN vs LEFT JOIN performance in SQL Server

© www.soinside.com 2019 - 2024. All rights reserved.