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 originalmysql>
+--------+-------------+
| unidad | descripcion |
+--------+-------------+
| 1 | Años |
| 2 | Meses |
| 3 | Dias |
+--------+-------------+
+------+-------------------+----------+---------------+----------------------+---------------+--------------------+---------------------------+
| id | paciente | Vacunado | edad_vacunado | unidad_edad_vacunado | desparasitado | edad_desparasitado | unidad_edad_desparasitado |
+------+-------------------+----------+---------------+----------------------+---------------+--------------------+---------------------------+
| 1 | Pepito Perez | SI | 4 | 1 | SI | 2 | 2 |
| 2 | Juanito Garcia
| NO | NULL | NULL | SI
| 3 | 3 | | 3 | Pedrito Fernandez
| SI
| 3 | 1 | NO | NULL | NULL | +------+-------------------+----------+---------------+----------------------+---------------+--------------------+---------------------------+
Para cada campo que tenga relación con el catálogo de unidades debes hacer un LEFT JOIN, así:
Código MySQL:
Ver originalmysql
> SELECT paciente
, vacunado
, edad_vacunado
, U1.descripcion
, desparasitado
, edad_desparasitado
, U2.descripcion
-> LEFT JOIN tabla_unidades U1
ON tabla_uno.unidad_edad_vacunado
= U1.unidad
-> LEFT JOIN tabla_unidades U2
ON tabla_uno.unidad_edad_desparasitado
= U2.unidad
; +-------------------+----------+---------------+-------------+---------------+--------------------+-------------+
| paciente | vacunado | edad_vacunado | descripcion | desparasitado | edad_desparasitado | descripcion |
+-------------------+----------+---------------+-------------+---------------+--------------------+-------------+
| Pepito Perez | SI | 4 | Años | SI | 2 | Meses |
| Juanito Garcia
| NO | NULL | NULL | SI
| 3 | Dias
| | Pedrito Fernandez
| SI
| 3 | Años
| NO | NULL | NULL | +-------------------+----------+---------------+-------------+---------------+--------------------+-------------+
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