Estoy buscando una consulta para obtener el nombre de todos los empleados bajo un administrador en particular de forma recursiva.
EMP_TABLE
EMP_ID EMP_NAME MANAGER_ID 1 A 3 2 B 3 3 C 4 4 D 5 5 E NULLConsulta:
SELECT EMP_ID, EMP_NAME, MANAGER_ID FROM EMP_TABLE WHERE MANAGER_ID=4;Salida de esta consulta:
EMP_ID EMP_NAME MANAGER_ID 3 C 4Rendimiento esperado:
EMP_ID EMP_NAME MANAGER_ID 1 A 3 2 B 3 3 C 4Debe usar CONNECT BY para procesar datos jerárquicos en la tabla:
https://docs.snowflake.com/en/sql-reference/constructs/connect-by.html
SELECT EMP_ID, EMP_NAME, MANAGER_ID FROM EMP_TABLE START WITH MANAGER_ID=4 CONNECT BY MANAGER_ID = prior EMP_ID ORDER BY EMP_ID; +--------+----------+------------+ | EMP_ID | EMP_NAME | MANAGER_ID | +--------+----------+------------+ | 1 | A | 3 | | 2 | B | 3 | | 3 | C | 4 | +--------+----------+------------+puede usar esta consulta simple SELECCIONE * DESDE EMP_TABLE DONDE MANAGER_ID NO ES NULO
La solución CONNECT BY es muy clara.
Aquí tienes una solución recursiva:
WITH rec AS ( SELECT EMP_ID, EMP_NAME, MANAGER_ID FROM EMP_TABLE WHERE MANAGER_ID=4 UNION ALL SELECT tb.EMP_ID, tb.EMP_NAME, tb.MANAGER_ID FROM rec AS ta JOIN EMP_TABLE AS tb ON ta.EMP_ID = tb.MANAGER_ID ) SELECT EMP_ID, EMP_NAME, MANAGER_ID FROM rec ORDER BY 1;