sql >> データベース >  >> RDS >> Mysql

複数のテーブルのMysqlCOUNT(*)

    副選択を使用すると、次のことができます。

    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
    

    ただし、コースに多くの行がある場合、これはコストのかかるクエリになるため、注意してください。

    編集: テーブルが非常に大きい場合は、次のクエリのパフォーマンスが大幅に向上するはずです(読み取りと理解がより複雑になるため)。

    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. ダウンロード用の安全なファイル

    2. SQLServer2008でトランザクションログを表示する方法

    3. デフォルト値がないため、mysqlは挿入できませんか?

    4. READ UNCOMMITTED分離レベルを使用するのはなぜですか?