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!
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.)