MySQL - ¿Cómo junto datos de una UNION?

 
Vista:
sin imagen de perfil

¿Cómo junto datos de una UNION?

Publicado por Pablo (2 intervenciones) el 24/10/2016 21:06:34
¡¡Primero que nada buen día!!

Creo el tema porque tengo una duda con una consulta que es la siguiente:

-Tengo una base de datos con la tabla 'docente', 'asistencia' e 'inasistencia' (en estas últimas dos, está la ID del docente como foranea) y necesito hacer un JOIN entre esas tres tablas para que me muestre, para cada docente, las asistencias e inasistencias que tiene. En caso de no tener una de las dos (asistencia o inasistencia) debe devolver 0 o null. Para llevar esto a cabo hice dos JOIN individuales con docente y los uní con UNION pero me devuelve primero el primer select y después, a continuación, el segundo select, quedando algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
select d.apellido, d.nombre, SUM(asi.fin-asi.inicio)asistencia, null asistencia
 
from docente d left outer join asistencia asi
 
on  d.cId=asi.cId AND (MONTH(asi.fecha))=(MONTH(CURRENT_DATE)) GROUP BY d.cId
 
UNION
 
select d.apellido, d.nombre, null inasistencia, SUM(ina.horaminuto)inasistencia
 
from docente d left outer join inasistencia ina
 
on d.cId=ina.cId AND  (MONTH(ina.fecha))=(MONTH(CURRENT_DATE)) GROUP BY d.cId

Dicho esto la duda puntual es: ¿Cómo uno la información de ambos select para que no se repitan los docentes dos veces, una vez para cada select? Imagino que con algun GROUP BY pero no se como...

Cualquier ayuda viene bien, gracias de antemano!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

¿Cómo junto datos de una UNION?

Publicado por xve (1151 intervenciones) el 25/10/2016 07:30:10
Hola Pablo, no se si es la solución, pero... porque en vez de hacer un UNION, no haces un JOIN como comentas?

algo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT * FROM
 
(select idDocente, d.apellido, d.nombre, SUM(asi.fin-asi.inicio)asistencia, null asistencia
 
from docente d left outer join asistencia asi
 
on  d.cId=asi.cId AND (MONTH(asi.fecha))=(MONTH(CURRENT_DATE)) GROUP BY d.cId) as S1
 
LEFT JOIN
 
(select idDocente, d.apellido, d.nombre, null inasistencia, SUM(ina.horaminuto)inasistencia
 
from docente d left outer join inasistencia ina
 
on d.cId=ina.cId AND  (MONTH(ina.fecha))=(MONTH(CURRENT_DATE)) GROUP BY d.cId) as S2
 
ON S1.idDocente=S2.idDocente

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

¿Cómo junto datos de una UNION?

Publicado por Pablo (2 intervenciones) el 26/10/2016 22:16:49
Al final hice, en lugar de la union, dos left join... quedó así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE VIEW ResumenDocente (apellido, nombre, asistencia, inasistencia) AS
SELECT d.nombre, d.apellido, COALESCE(SUM(asi.fin - asi.inicio),0) asistencias, COALESCE(SUM(ina.horaminuto),0)inasistencia
 
FROM docente d
 
 LEFT OUTER JOIN  asistencia asi
     ON d.cId = asi.cId
         AND MONTH(asi.fecha) = MONTH(CURRENT_DATE)
 
    LEFT OUTER JOIN inasistencia ina
     ON d.cId = ina.cId
         AND MONTH(ina.fecha) = MONTH(CURRENT_DATE)
 
GROUP BY d.cId

Muchas gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar