listar datos de dos tablas en funcion del valor de un campo de una tercera tabla
Publicado por nicolas (7 intervenciones) el 18/11/2017 21:58:56
Hola Gente. Soy nuevo en este foro.
Espero que me puedan ayudar con el siguiente problema:
Tengo las siguiente tablas relacionadas por los campos encerrados con parentesis:
-admision_internacion (id, id_paciente)
-hc_internacion (id, id_admision)
-admision_guardia (id, id_paciente)
-hc_guardia (id, 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!
Espero que me puedan ayudar con el siguiente problema:
Tengo las siguiente tablas relacionadas por los campos encerrados con parentesis:
-admision_internacion (id, id_paciente)
-hc_internacion (id, id_admision)
-admision_guardia (id, id_paciente)
-hc_guardia (id, 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!
Valora esta pregunta
0