sql >> Databáze >  >> RDS >> Mysql

MySQL Počítání odpovídajících záznamů z více tabulek

Další způsob, jak přepsat tento dotaz.

Seskupte a počítejte v každé tabulce jednotlivě a poté se připojte:

SELECT  a.id, 
        COALESCE(b.t1, 0) AS t1,
        COALESCE(c.t2, 0) AS t2,
        COALESCE(d.t3, 0) AS t3
FROM
        entity a
    LEFT JOIN
        ( SELECT ei,
                 COUNT(*) AS t1
          FROM table1
          GROUP BY ei
        ) AS b
            ON a.id = b.ei
    LEFT JOIN
        ( SELECT ei,
                 COUNT(*) AS t2
          FROM table2
          GROUP BY ei
        ) AS c
            ON a.id = c.ei
    LEFT JOIN
        ( SELECT ei,
                 COUNT(*) AS t3
          FROM table3
          GROUP BY ei
        ) AS d
            ON a.id = d.ei
  ;

Určitě byste měli přidat index na (ei) na každém ze 3 stolů, pokud žádný nemáte.



  1. Ekvivalent GROUP_CONCAT v Django

  2. Sqlalchemy nefunguje se stránkováním

  3. Jak se dotazovat na prvek JSON

  4. Zablokování pomocí SELECT ... FOR UPDATE v MySQL