Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Condiciones de Varios Registros

Estas en el tema de Condiciones de Varios Registros en el foro de Mysql en Foros del Web. Hola a todos, tengo el siguiente problema, tengo una base datos con las siguientes tablas: Trabajador: id_trabajador, nombre, fecha_nacimiento, y otros datos personales Fabricas: id_fabrica, ...
  #1 (permalink)  
Antiguo 12/04/2010, 08:03
Avatar de juankcres  
Fecha de Ingreso: septiembre-2009
Mensajes: 88
Antigüedad: 14 años, 7 meses
Puntos: 2
Pregunta Condiciones de Varios Registros

Hola a todos, tengo el siguiente problema, tengo una base datos con las siguientes tablas:

Trabajador: id_trabajador, nombre, fecha_nacimiento, y otros datos personales

Fabricas: id_fabrica, nombre_fabrica

Experiencias_trabajador: id_trabajador, id_fabrica

Mi consulta es como puedo seleccionar todos los trabajadores que tengan experiencias en determinadas fabricas?????

yo lo que he intentado es esto, pero no creo que sea lo más apropiado.

Código MySQL:
Ver original
  1. SELECT * FROM Trabajador as tr Join Experiencias_Trabajador as exp1 ON ( exp1.id_trabajador="XXXX" AND exp1. id_fabrica=1)
  2.  
  3. Join Experiencias_Trabajador as exp2 ON ( exp2.id_trabajador="XXXX" AND exp2. id_fabrica=2)
  4.  
  5. ...
  6.  
  7. hasta n veces
  8. Join Experiencias_Trabajador as expn ON ( expn.id_trabajador="XXXX" AND expn. id_fabrica=n)

Se agradece cualquier ayuda.
__________________
Sé fiel hasta la muerte, y yo te daré la corona de la vida.

Ap. 2:10
  #2 (permalink)  
Antiguo 12/04/2010, 17:33
Avatar de juankcres  
Fecha de Ingreso: septiembre-2009
Mensajes: 88
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Condiciones de Varios Registros

Alguna ayuda!!!!!!!!!!
__________________
Sé fiel hasta la muerte, y yo te daré la corona de la vida.

Ap. 2:10
  #3 (permalink)  
Antiguo 12/04/2010, 17:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
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)
  #4 (permalink)  
Antiguo 12/04/2010, 18:15
Avatar de juankcres  
Fecha de Ingreso: septiembre-2009
Mensajes: 88
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Condiciones de Varios Registros

El problema esta en que el trabajador tiene N experiencias en fabricas.

Mi duda es ¿como puedo preguntar por un listado de trabajadores que tengan experiencias en varias fabricas?, es decir quiero ver todos los vendedores con experiencia en la fabrica 1 y que también tengan experiencia en la fabrica 2 , y que tambien tengan experiencia en la fabrica1000.

Espero haber podido clarificar cual es el problema.

De antemano muchas gracias.
__________________
Sé fiel hasta la muerte, y yo te daré la corona de la vida.

Ap. 2:10
  #5 (permalink)  
Antiguo 12/04/2010, 19:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Condiciones de Varios Registros

Los ejemplos que te puse cubren tus requerimientos. El que tengan experiencia en la fábrica 1 y en la 2, requiere poner esos valores como condiciones del WHERE y usar HAVING:
Código MySQL:
Ver original
  1. SELECT E.id_trabajador, E.nombre, E.fecha_nacimiento, F.id_fabrica
  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 (1,2)
  6. GROUP BY ET.id_trabajador
  7. HAVING COUNT(*) =2;

Lo que debías hacer es tomar la parte genérica de lo que te propongo, y analizar qué condiciones y cláusulas usar para restringir el resultado a lo que necesitas.
No esperes a que te den toda la solución, investiga.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 13/04/2010, 07:30
Avatar de juankcres  
Fecha de Ingreso: septiembre-2009
Mensajes: 88
Antigüedad: 14 años, 7 meses
Puntos: 2
De acuerdo Respuesta: Condiciones de Varios Registros

No estoy esperando la solución, y eh seguido investigando y llegue a algo parecido, sin haber visto tu ultima respuesta
:

Código MySQL:
Ver original
  1. SELECT tr.id_trabajador, tr.nombre_trabajador
  2. FROM trabajador  as tr JOIN (SELECT id_trabajador, count(*) as cant from experiencias_trabajador where id_fabrica = 1 OR id_fabrica=2 (y así las condiciones que requiero) Group by id_trabajador) AS expe ON ( expe.id_trabajador = tr.id_trabajador)
  3. WHERE expe.cant=N

Muchas gracias por tu ayuda.
__________________
Sé fiel hasta la muerte, y yo te daré la corona de la vida.

Ap. 2:10

Etiquetas: condiciones, registros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:37.