Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie anzahlabhängige Zeilen aus mehreren Tabellen mit Union aus

Sie haben Ihre Abfrage zu kompliziert gemacht, verwenden Sie einfach group by, um die Anzahl nach Gruppen zu erhalten. Update:Da Sie in den Tabellen 4a und 4b die gleichen Schlüssel haben und diese in einer Ausgabe zusammenfassen möchten, benötigen Sie je nach verwendeter Unterabfrage eine übergreifende Summe oder Anzahl

select kd_hari, hari, sum(rowcount) as rowcount from
    (select a.kd_hari,hari, count(a.kd_hari) as rowcount
    from 4a a,tbhari h where a.kd_hari=h.kd_hari and kd_ruang in('L','P')
    group by a.kd_hari,hari
    union all
    select b.kd_hari,hari, count(b.kd_hari) 
    from 4b a,tbhari h where a.kd_hari=h.kd_hari and kd_ruang in('L','P')
    group by a.kd_hari,hari) as t
group by kd_hari,hari

Kombinieren Sie alternativ 4a und 4b mit einer Union all in einer Unterabfrage und verbinden Sie das mit der tbhari-Tabelle, und Sie können auf diese Weise count() mit group by in der Unterabfrage verwenden, da die Unterabfrage alle Zeilen aus beiden Tabellen enthält.

So wie ich den Beispielcode geschrieben habe, können Sie jedoch die vorhandenen Indizes nutzen, während Sie die Tabellen verknüpfen. Wenn Sie sie zuerst mit Union kombinieren und dann den Join durchführen, werden keine Indizes für den Join verwendet.