Cita: esto es que si en personal tengo registrado a Juan Perez, necesito saber cuantas veces y en que fechas lo asignaron a otras áreas y cuantas veces y en que fechas tomo sus periodos de vacaciones, cuantas veces y en que fechas ha sido castigado y en que fechas, cuantas veces y en que fechas se ha incapacitado.
Es posible, aunque en este caso la consulta será algo larga...
Por empezar, toda consulta que se refiera a un X conjunto de datos debe tener como primera tabla invocada, la que contenga la información básica, en este caso
Personal, ya que es un reporte de todo el personal. Las diferentes tablas se van, entonces, refiriendo a ella en sucesivos JOIN,
pero no cualquier JOIN, sino LEFT JOIN, ya que estos devolverán los datos de la tabla de la izquierda (la primera), haya o no coincidencias con la segunda (derecha).
Esto es primordial, porque debe devolver los miembros de personal,
haya o no haya datos en las otras tablas, esto es, tenga o no asignaciones, castigos, etc.
Tip: Realiza las pruebas en forma incremental: Crea el primer JOIN y prueba que te de el resultado correcto. Luego toma ese JOIN y agrega el JOIN con la segunda tabla, prueba y luego recién ve sumando tablas una a una.
Es un recurso práctico.
No intentes, insisto
no intentes escribir todo el JOIN con todas las tablas de entrada. Casi siempre hay errores que son difíciles de depurar.
Prueba:
Código MySQL:
Ver original id,
gafet,
nombre,
apellidos,
direccion,
COUNT(asigna_id
) Asignaciones
, desempeno,
fecha1
Este esquema se repetiría en todos los casos, más o menos igual.
Tip 2:
No intentes hacer una sola consulta con todas las tablas si el resultado buscado es incompatible. En tu caso estás pidiendo 1) Cantidad y fechas de asignaciones a otras áreas. 2) Cantidad de días y fecha de inicio de vacaciones, y así todos los ítems.
Estos son conceptos
incompatibles para realizar una sola consulta, porque estás pidiendo
discriminación de días y eso devolverá una tabla con una columna de días, las que no se pueden compatibilizar con el resultado de las otras.
Para que se entienda: Para que una consulta devuelva un resultado en forma de tabla, debe existir una relación entre todos los campos
de cada registro, y en este caso no lo habrá. La fecha de una infracción (supongamos línea 3), no tiene relación con la fecha de unas vacaciones que aparezcan en la misma línea...
¿Se comprende la idea?
El problema aquí es que si fuesen
cantidades solamente, no habría inconveniente; pero tu pides las fechas discriminadas... y eso complica todo.
podría hacer es realizar un UNION consecutivo, devolviendo todas las informaciones, ya que la cantidad de columnas devueltas sería la misma... pero eso quedaría algo "sucio" como tabla