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.