Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/04/2010, 17:55
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 1 mes
Puntos: 2658
Respuesta: Condiciones de Varios Registros

Mira, no se ve cual es el problema que tienes, porque obtener el listado de los empleados que tienen experiencia en determinadas fábricas, con esas tres tablas es bastante elemental.
Usando INNER JOIN, y considerando que la tabla experiencias_trabajador contiene la relación entre los empleados y las fábricas, la sentencia que devuelve el listado completo sería más o menos así:
Código MySQL:
Ver original
  1. FROM trabajador E
  2.           INNER JOIN experiencias_trabajador ET USING(id_trabajador)
  3.           INNER JOIN fabrica F USING(id_fabrica);
Esta forma no discrimina nada y devuelve eventualmente, nombres repetidos de los trabajadores que se desempeñaron en más de una fábrica.
Para sólo recuperar los nombres, sería:
Código MySQL:
Ver original
  1. SELECT DISTINCT E.id_trabajador, E.nombre, E.fecha_nacimiento
  2. FROM trabajador E
  3.           INNER JOIN experiencias_trabajador ET USING(id_trabajador)
  4.           INNER JOIN fabrica F USING(id_fabrica);

A esta sentencia se le debe agregar o una subconsulta o bien un listado, en ambos casos usando la cláusula IN(), a fin de recuperar solamente aquellos que hayan trabajado efectivamente en una fábrica determinada:

Código MySQL:
Ver original
  1. SELECT E.*, F.*
  2. FROM trabajador E
  3.           INNER JOIN experiencias_trabajador ET USING(id_trabajador)
  4.           INNER JOIN fabrica F USING(id_fabrica)
  5. WHERE ET.id_fabrica IN(listadecodigos)
  6. ORDER BY ET.id_trabajador, ET.id_fabrica;

o bien:
Código MySQL:
Ver original
  1. SELECT E.*, F.*
  2. FROM trabajador E
  3.           INNER JOIN experiencias_trabajador ET USING(id_trabajador)
  4.           INNER JOIN fabrica F USING(id_fabrica)
  5. WHERE ET.id_fabrica IN(SELECT id_fabrica FROM fabrica WHERE condiciones)
  6. ORDER BY ET.id_trabajador, ET.id_fabrica;

Siendo que listadecodigos sería un listado de los ID de las fábricas (un ID al menos) de las que se desea saber los empleados, y condiciones las condiciones a cumplir para seleccionar un conjunto de IDs.
El resultado de ambos sería idéntico, pero la forma de realizar la lectura de datos varía.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)