Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql COUNT(*) na wielu stołach

Korzystając z podselekcji, możesz:

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

Ale bądź ostrożny, ponieważ jest to kosztowne zapytanie, gdy kursy mają wiele wierszy.

EDYTUJ: Jeśli twoje tabele są dość duże, poniższe zapytanie powinno działać znacznie lepiej (zamiast tego, że jest bardziej złożone do czytania i zrozumienia).

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. com.mysql.jdbc.exceptions.MySQLSyntaxErrorException podczas korzystania z PreparedStatement

  2. Lista procedur/funkcji składowanych Wiersz poleceń Mysql

  3. Który jest najszybszy? SELECT SQL_CALC_FOUND_ROWS FROM `tabela` lub SELECT COUNT(*)

  4. MySql nie może zaktualizować wiersza nadrzędnego, gdy mam ON UPDATE CASCADE

  5. Jak używać mysqlimport do odczytywania wyniku mysqldump --databases