Tema: Inner Join
Ver Mensaje Individual
  #7 (permalink)  
Antiguo 25/10/2013, 12:51
gemeli16
 
Fecha de Ingreso: octubre-2013
Mensajes: 30
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Inner Join

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Entendamos un par de conceptos sobre el JOIN:
1) Cuando se trata de JOIN implícitos, MySQL automáticamente realiza un matching entre campos de ambas tablas que tengan el mismo nombre. Esto puede hacer que el join se realice entre campos que teniendo igual nombre, tengan datos diferentes.
Esto obviamente no es lo esperable y los resultado erroneos pueden ser muchos.
2) Un INNER JOIN implica que MySQL devuelva aquellos registros que efectivamente cumplan con lo que se indica en cada uno de los ON. Es decir, si al menos uno de los tres INNER JOIN no se cumple, ese registro no será devuelto bajo ninguna circunstancia.
En tu caso eso significa que todo empleado debe estar relacionado con un área, que cada empleado debe tener un puesto, y que cada empelado debe tener un nivel de acceso declarado.
Cualquiera de los datos que sea opcional, donde el empleado no esté relacionado, y ese empleado no existirá en la tabla devuelta.

Todo esto se puede validar sin problemas, por ejemplo:
Código MySQL:
Ver original
  1. SELECT IdEmp
  2. FROM empleado E LEFT JOIN area A ON A.IdArea = E.IdArea
  3. WHERE A.IdArea IS NULL;
  4.  
  5. SELECT IdEmp
  6. FROM empleado E LEFT JOIN JOIN niveldeacceso N ON E.IdNivel = N.IdNivel
  7. WHERE N.IdNivel IS NULL;
  8.  
  9. SELECT IdEmp
  10. FROM empleado E LEFT JOIN puesto P ON E.IdPuesto = P.IdPuesto
  11. WHERE P.IdPuesto  IS NULL;
Si alguna de estas devuelve datos, ese registro no saldrá en tu consulta principal.

No hay otra alternativa.

Por cierto, el uso de JOIN implícito tal como lo planteaste puede generar un producto cartesiano entre registros no relacionados. Ese es uno de los peores escenarios de consulta, porque es pura basura.
Realice lo que me dijiste, y busque todos los datos de mis tablas que realmente estuvieran coincidiendo y tenias razón, algunos de los datos ya no eran validos como el área que tenia asignado el empleado, por lo cual como mencionas no me daba la consulta y no lo había mencionado pero al yo realizar las consultas que puse primero anteriormente si me daba mi resultado, pero por x causa ya después en otras pruebas entre que quitas y agregas registros no me percate de esa parte. Pero ya quedo.

Muchas gracias por tu aporte, es bueno contar con personas como tu =).

Saludos