Seleccione filas dependientes de conteo de múltiples tablas con unión

En este caso tiene tres tablas

4a y 4b es una table principal

tbhari solo una tabla de categorías

CREATE TABLE IF NOT EXISTS `4a` ( `kd_hari` char(5), `kd_ruang` char(1) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `4a` (`kd_hari`,`kd_ruang`) VALUES ('a_Mon','0'), ('a_Mon','3'), ('a_Mon','P'), ('a_Mon','0'), ('b_Tue','0'), ('b_Tue','0'), ('b_Tue','P'), ('b_Tue','4'), ('c_Wed','0'), ('c_Wed','P'), ('c_Wed','2'), ('c_Wed','L'), ('d_Thu','0'), ('d_Thu','0'), ('d_Thu','3'), ('d_Thu','0'), ('e_Fri','0'), ('e_Fri','0'), ('e_Fri','0'), ('e_Fri','0'); CREATE TABLE IF NOT EXISTS `4b` ( `kd_hari` char(5) DEFAULT NULL, `kd_ruang` char(1) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `4b` (`kd_hari`,`kd_ruang`) VALUES ('a_Mon','0'), ('a_Mon','4'), ('a_Mon','L'), ('a_Mon','0'), ('b_Tue','4'), ('b_Tue','0'), ('b_Tue','4'), ('b_Tue','0'), ('c_Wed','0'), ('c_Wed','3'), ('c_Wed','L'), ('c_Wed','0'), ('d_Thu','0'), ('d_Thu','0'), ('d_Thu','0'), ('d_Thu','0'), ('e_Fri','3'), ('e_Fri','L'), ('e_Fri','0'), ('e_Fri','0'); CREATE TABLE IF NOT EXISTS `tbhari` ( `kd_hari` char(5) DEFAULT NULL, `hari` varchar(6) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `tbhari` (`kd_hari`, `hari`) VALUES ('a_Mon', 'Senin'), ('b_Tue', 'Selasa'), ('c_Wed', 'Rabu'), ('d_Thu', 'Kamis'), ('e_Fri', 'Jumat'); 

utilizo esta consulta de selección a continuación.

 select a.kd_hari,hari, (select count(kd_hari) from 4a where kd_hari=a.kd_hari)jml from 4a a,tbhari h where a.kd_hari=h.kd_hari and kd_ruang in('L','P') union all select b.kd_hari,hari, (select count(kd_hari) from 4b where kd_hari=b.kd_hari)jml from 4b b,tbhari h where b.kd_hari=h.kd_hari and kd_ruang in('L','P') order by kd_hari; 

encima de la consulta de selección me da el resultado

 +---------+--------+------+ | kd_hari | hari | jml | +---------+--------+------+ | a_Mon | Senin | 4 | | a_Mon | Senin | 4 | | b_Tue | Selasa | 4 | | c_Wed | Rabu | 4 | | c_Wed | Rabu | 4 | | c_Wed | Rabu | 4 | | e_Fri | Jumat | 4 | +---------+--------+------+ 

el problema está en el resultado de la tabla anterior que la columna jml no count depende de los datos de la columna kd_hari

entonces, necesito el resultado como a continuación.

 +---------+--------+------+ | kd_hari | hari | jml | +---------+--------+------+ | a_Mon | Senin | 2 | | a_Mon | Senin | 2 | | b_Tue | Selasa | 1 | | c_Wed | Rabu | 3 | | c_Wed | Rabu | 3 | | c_Wed | Rabu | 3 | | e_Fri | Jumat | 1 | +---------+--------+------+ 

mira la columna jml tiene datos kd_hari o hari con depende de los datos de la columna kd_hari o hari.

Muchas gracias por tu respuesta.

Ha complicado demasiado su consulta, solo use agrupar por para get los recuentos por grupos. Actualización: ya que tiene las mismas keys en ambas tablas 4a y 4b y desea resumirlas en una salida, necesita una sum global o recuento según la subconsulta que utilice

 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 

Alternativamente, combine 4a y 4b con una unión en una subconsulta y únase a la tabla tbhari y puede usar count () con group by en la subconsulta de esa manera porque la subconsulta includeá todas las filas de ambas tablas.

Sin embargo, la forma en que escribí el código de muestra puede aprovechar los índices existentes al unir las tablas. Si los combina primero con union y luego realiza la unión, no se usarán índices para la unión.