我在mysql数据库中有关于在子查询中计数的问题。假设我有一个book
表,其中包含author_id
和author
表id
和name
。我想获得作者列表,其中包含每位作者的书籍数量。所以我使用这个查询:
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
这没有任何问题。但我想知道,此解决方案是否是此类示例的最佳解决方案?如果没有,是否有更好的解决方法可以解决这些问题?
感谢您的关注。
答案 0 :(得分:1)
您可以使用join
和group 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