Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez le nombre de lignes dépendantes de plusieurs tables avec union

Vous avez trop compliqué votre requête, utilisez simplement group by pour obtenir les décomptes par groupes. Mise à jour :puisque vous avez les mêmes clés dans les tableaux 4a et 4b et que vous souhaitez les résumer en une seule sortie, vous avez besoin d'une somme ou d'un décompte global en fonction de la sous-requête que vous utilisez

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

Alternativement, combinez 4a et 4b avec une union all dans une sous-requête et joignez-la sur la table tbhari et vous pouvez utiliser count() avec group by sur la sous-requête de cette façon car la sous-requête inclura toutes les lignes des deux tables.

Cependant, la façon dont j'ai écrit l'exemple de code vous permet de tirer parti des index existants tout en joignant les tables. Si vous les combinez d'abord avec union puis effectuez la jointure, aucun index ne sera utilisé pour la jointure.