[ Foro de SQL (y MySQL) ]

listar resultados de dos tablas en funcion del valor de un campo de otra tabla

18-Nov-2017 21:45
nicolas martinez
1 Respuestas

Hola Gente. Soy nuevo en este foro.
Espero que me puedan ayudar con el siguiente problema:

Tengo las siguiente tablas relacionadas:

 
-admision_internacion (id, id_paciente)
-hc_internacion (id_admision)
 
-admision_guardia (id, id_paciente)
-hc_guardia (id_admision)
 
-diagnosticos (id, id_hc, tipo_hc{'hc_internacion','hc_guardia'}, id_cie)
 


La idea es mostrar los diagnosticos de un determinado paciente en los dos niveles de atencion (guardia e internacion) ordenados cronologicamente.
La consulta es la siguiente:

 
SELECT DISTINCT diag.id_cie, diag.tipo_hc
FROM diagnosticos AS diag, hc_guardia AS hcg, 
  hc_internacion AS hci, admision_guardia AS admg, 
  admision_internacion AS admi
WHERE admg.id_paciente=222 
  AND ((admg.id=hcg.id_admision AND hcg.id=diag.id_hc AND 
  diag.tipo_hc='hc_guardia')
  OR 
  (admi.id=hci.id_admision AND hci.id=diag.id_hc AND 
  diag.tipo_hc='hc_internacion'))
 


La consulta funciona correctamente. El problema es que tarda una eternidad!, creo que es por cantidad de tuplas repetidas que realiza(por eso el DISTINCT en la clausula SELECT).

Existe alguna forma de optimizar esta consulta?. Intente con INNER JOIN pero no he tenido exito.

Agradeceria su ayuda colegas!


20-Nov-2017 22:50
Nacho Cabanes (+32)

Puedes programar una UNION de las dos primeras tablas. No garantizo que te acelere el resultado, pero podría ser, al resultar una consulta final mucho más compacta. Al hacer la UNION puedes crear un campo adicional al vuelo, que te permita saber de dónde vienen los datos, algo como:

 
SELECT 'hc_guardia' AS tipo, id, id_paciente FROM admision_guardia;
 






Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...