sql >> Database teknologi >  >> RDS >> Mysql

Mysql COUNT(*) på flere tabeller

Ved at bruge undervalg kan du gøre:

SELECT co.*, 
    (SELECT COUNT(*) FROM modules mod WHERE mod.course_id=co.id) AS moduleCount, 
    (SELECT COUNT(*) FROM videos vid WHERE vid.course_id=co.id) AS vidCount
FROM courses AS co
ORDER BY co.id DESC
 

Men vær forsigtig, da dette er en dyr forespørgsel, når kurser har mange rækker.

EDIT: Hvis dine tabeller er ret store, burde følgende forespørgsel fungere meget bedre (til fordel for at være mere kompleks at læse og forstå).

SELECT co.*, COALESCE(mod.moduleCount,0) AS moduleCount, COALESCE(vid.vidCount,0) AS vidCount FROM courses AS co LEFT JOIN ( SELECT COUNT(*) AS moduleCount, course_id AS courseId FROM modules GROUP BY course_id ) AS mod ON mod.courseId = co.id LEFT JOIN ( SELECT COUNT(*) AS vidCount, course_id AS courseId FROM videos GROUP BY course_id ) AS vid ON vid.courseId = co.id ORDER BY co.id DESC

  1. Sådan rettes "Kun ét udtryk kan angives i valglisten ..." i SQL Server

  2. Hvordan installerer jeg kommandolinje MySQL-klient på mac?

  3. Oracle:Hvordan finder man ud af, om der er en afventende transaktion?

  4. Kædning af orX i Doctrine2-forespørgselsbyggeren