2017-12-23 5 views
0

Ich habe eine Frage über in Unterabfrage in Mysql-Datenbank zählen. Angenommen, ich habe eine book Tabelle mit einer author_id und einer author Tabelle mit id und name. Ich möchte eine Autorenliste mit der Anzahl der Bücher für jeden Autor erhalten. Also verwende ich diese Abfrage:wie COUNT in Unterabfrage in optimierter Weise wählen

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 

Dies funktioniert ohne ein Problem. Aber ich möchte wissen, Ist diese Lösung die beste und optimierte Lösung für solche Beispiele? Wenn nicht, gibt es eine bessere Problemumgehung für diese Probleme?

Vielen Dank für Ihre Aufmerksamkeit.

+0

Sie ein Komma vor der Unterabfrage fehlt. – Barmar

Antwort

1

Sie können join und group by verwenden, da Sie Daten aggregieren müssen, wenn Sie die Anzahl der von jedem Autor geschriebenen Bücher zählen.

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; 

ein left join Verwendung besser sein wird, wenn nicht alle Autoren Bücher im Büchertisch haben, sonst wird inner join optimal INNER JOIN vs LEFT JOIN performance in SQL Server