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

[SOLUCIONADO] relacionar varios campos de una tabla con una misma tabla maestra

Estas en el tema de relacionar varios campos de una tabla con una misma tabla maestra en el foro de Mysql en Foros del Web. Hola a todos, presento una duda. Tengo una tabla con unas preguntas y cada una lleva la edad del niño de esta forma. lactancia_materna | ...
  #1 (permalink)  
Antiguo 09/07/2015, 09:16
Avatar de mager3  
Fecha de Ingreso: junio-2012
Ubicación: Medellin
Mensajes: 318
Antigüedad: 11 años, 10 meses
Puntos: 4
Información relacionar varios campos de una tabla con una misma tabla maestra

Hola a todos, presento una duda.

Tengo una tabla con unas preguntas y cada una lleva la edad del niño de esta forma.


lactancia_materna | si
edad_ma | 3
unidad_edad_ma | 1

vacunado | si
edad_va | 4
unidad_edad_va | 2

entonces hay una tabla que se llama medidas edad asi:

descrip -cod
Años | 1
Meses | 2
Dias |3

Mi pregunta es: como hago en la consulta para traerme en la unidad_edad_va, unidad_edad_ma , porque si tuviera una sola pregunta me pareceria facil, pero en este caso que son varios campos en un mismo registro que se comparan con la misma tabla maestra, no se como realizarlo..

  #2 (permalink)  
Antiguo 09/07/2015, 09:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: relacionar varios campos de una tabla con una misma tabla maestra

creo que tus tablas estan mal o no estas poniendo la informacion bien.......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 09/07/2015, 09:42
Avatar de mager3  
Fecha de Ingreso: junio-2012
Ubicación: Medellin
Mensajes: 318
Antigüedad: 11 años, 10 meses
Puntos: 4
Información Respuesta: relacionar varios campos de una tabla con una misma tabla maestra

Libras, gracias por responder, te comparto lo siguiente:

hay una tabla que tiene la informacion basica del niño

TABLA 1

PAciente : Pepito perez

Vacunado SI/NO
edad_vacunado 4
unidad_edad_vacunado 1

desparasitado SI/NO
edad_desparasitado 2
unidad_edad_desparasitado 2

alimentado_leche_materna SI/NO
edad_leche_materna 1
unidad_edad_leche_materna 1

///////////////////////////////

y la tabla maestra de la unidad_edad tiene:

TABLA 2
Años 1
Meses 2
dias 3

la idea es que al imprimir en pantalla la informacion de la tabla 1 no puedo mostrarle al usuario pepito perez SI le dieron leche materna hasta los 1 1 sino asi: Pepito Perez Si le dieron leche materna hasta los 1 Años.

pero me parece erroneo crear una tabla de unidad_edad_materna, otra que diga unidad_edad_vacunado etc etc, sabiendo que todas tendrian lo mismo que seria.

Años 1
Meses 2
dias 3
  #4 (permalink)  
Antiguo 09/07/2015, 11:27
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: relacionar varios campos de una tabla con una misma tabla maestra

Hola Mager:

Desde mi punto de vista tienes un muy mal modelo de BD's... cuando un atributo es opcional (como es tu caso, pues depende de la respuesta Si/No) debes crear una tabla aparte, ¿Qué pasa cuando se contesta NO a alguna de las preguntas? supongo que deberás dejar los campos relacionados (edad y unidad como nulos cierto)... esto es un terrible error de diseño. Si tienes oportunidad de cambiar tu modelo, hazlo y evita dolores de cabeza, (y que te cueste mucho trabajo no es una razón para no hacerlo).

Ahora bien, si en realidad no puedes modificar tu modelo de datos, lo que quieres hacer se puede hacer utilizando JOIN's, duplicando la tabla catálogo por cada campo que quieras relacionar de manera independiente, utilizando alias distintos... va un ejemplo, supongamos que tienes estos datos:

Código MySQL:
Ver original
  1. mysql>
  2.  
  3. mysql> SELECT * FROM tabla_unidades;
  4. +--------+-------------+
  5. | unidad | descripcion |
  6. +--------+-------------+
  7. |      1 | Años        |
  8. |      2 | Meses       |
  9. |      3 | Dias        |
  10. +--------+-------------+
  11. 3 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT * FROM tabla_uno;
  14. +------+-------------------+----------+---------------+----------------------+---------------+--------------------+---------------------------+
  15. | id   | paciente          | Vacunado | edad_vacunado | unidad_edad_vacunado | desparasitado | edad_desparasitado | unidad_edad_desparasitado |
  16. +------+-------------------+----------+---------------+----------------------+---------------+--------------------+---------------------------+
  17. |    1 | Pepito Perez      | SI       |             4 |                    1 | SI            |                  2 |                         2 |
  18. |    2 | Juanito Garcia    | NO       |          NULL |                 NULL | SI            |                  3 |                         3 |
  19. |    3 | Pedrito Fernandez | SI       |             3 |                    1 | NO            |               NULL |                      NULL |
  20. +------+-------------------+----------+---------------+----------------------+---------------+--------------------+---------------------------+
  21. 3 rows in set (0.00 sec)

Para cada campo que tenga relación con el catálogo de unidades debes hacer un LEFT JOIN, así:

Código MySQL:
Ver original
  1. mysql> SELECT paciente, vacunado, edad_vacunado, U1.descripcion, desparasitado, edad_desparasitado, U2.descripcion
  2.     -> FROM tabla_uno
  3.     -> LEFT JOIN tabla_unidades U1 ON tabla_uno.unidad_edad_vacunado = U1.unidad
  4.     -> LEFT JOIN tabla_unidades U2 ON tabla_uno.unidad_edad_desparasitado = U2.unidad;
  5. +-------------------+----------+---------------+-------------+---------------+--------------------+-------------+
  6. | paciente          | vacunado | edad_vacunado | descripcion | desparasitado | edad_desparasitado | descripcion |
  7. +-------------------+----------+---------------+-------------+---------------+--------------------+-------------+
  8. | Pepito Perez      | SI       |             4 | Años        | SI            |                  2 | Meses       |
  9. | Juanito Garcia    | NO       |          NULL | NULL        | SI            |                  3 | Dias        |
  10. | Pedrito Fernandez | SI       |             3 | Años        | NO            |               NULL | NULL        |
  11. +-------------------+----------+---------------+-------------+---------------+--------------------+-------------+
  12. 3 rows in set (0.00 sec)

De esta manera obtienes la descripción asociada al código de la unidad (observa que ya aprarece la palabra AÑOS, MESES, DIAS según corresponda).

Esta consulta sólo es válida si almacenas NULL cuando la respuesta es NO, si almacenas algún otro valor, el resultado puede no ser el deseado.

Haz la prueba y nos comentas.

Saludos
Leo
  #5 (permalink)  
Antiguo 09/07/2015, 11:37
Avatar de mager3  
Fecha de Ingreso: junio-2012
Ubicación: Medellin
Mensajes: 318
Antigüedad: 11 años, 10 meses
Puntos: 4
Respuesta: relacionar varios campos de una tabla con una misma tabla maestra

Huy leonardo, que gran dedicacion expones al contestar a mi pregunta, te lo agradezco, ya mismo lo voy a poner en práctica , no estaba almacenando NULL, lo voy a poner hacer y confirmo la funcionalidad...

Saludos.. y mil gracias


// confirmo que funciono perfectamente.. Gracias leonardo.. feliz día.

Última edición por mager3; 09/07/2015 a las 13:51 Razón: agradecimiento

Etiquetas: mysql+consulta
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 14:02.