[ 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 (+36)

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;
 






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)