Oracle SQL – Descartar selección externa si la selección interna devuelve null, y evitar múltiples filas
Pre-Información: En nuestra empresa, una persona es marcada con un asterisco (*) si está trabajando activamente. También hay personas que han cambiado de departamento.
Para un informe, utilizo 2 tablas llamadas COMPANY_PERSON_ALL y trifm_izinler4, uniendo el campo person_id de la siguiente manera:
Quiero descartar (no mostrar) la fila si la primera consulta interna devuelve nulo.
Y quiero evitar que la segunda consulta interna devuelva múltiples Departamentos.
select izn.person_id, izn.adi_soyadi, izn.company_id,
(select a.employee_status from COMPANY_PERSON_ALL a where a.employee_status = '*' and a.person_id = izn.person_id) as Status,
(select a.org_code from COMPANY_PERSON_ALL a where a.person_id = izn.person_id) as Department,
izn.hizmet_suresi, izn.kalan_izin
from trifm_izinler4 izn
where trunc(rapor_tarihi) = trunc(SYSDATE)
¿Puedes ayudarme a resolver estos 2 problemas de las consultas internas?
davy.ai
Para resolver el primer problema, donde la fila debe descartarse si la primera consulta interna devuelve null, podemos agregar una condición adicional en la cláusula WHERE para filtrar esas filas. La consulta actualizada se vería así:
Aquí, agregamos la condición “and exists…” para filtrar las filas en las que la primera consulta interna devuelve null.
Para resolver el segundo problema, donde necesitamos evitar que la segunda consulta interna devuelva varios departamentos, podemos agregar una condición adicional en la cláusula WHERE para limitar los resultados solo a empleados activos. La consulta actualizada se vería así:
Aquí, agregamos la condición “and rownum = 1” a la segunda consulta interna para limitar los resultados solo a la primera fila devuelta, que debería ser el departamento del empleado activo.