Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta hierárquica no MySQL. (conectar por equivalente para MySQL)


Não há suporte a consultas hierárquicas nativas no MySQL.

Para um número finito de níveis a serem percorridos, podemos escrever consultas que obtêm resultados para cada nível e combinar os resultados com um UNION ALL operador.

Ou podemos escrever um programa armazenado MySQL (procedimento) para uma abordagem mais recursiva.

Como exemplo de abordagem usando uma consulta SQL nativa:
 SELECT t0.comp_code
   FROM tb_corp t0
  WHERE t0.mgr_emp_no = 111

 UNION ALL

SELECT t1.comp_code
  FROM tb_corp t0
  JOIN tb_corp t1 ON t1.incharge_comp_code = t0.comp_code
 WHERE t0.mgr_emp_no = 111

 UNION ALL

SELECT t2.comp_code
  FROM tb_corp t0
  JOIN tb_corp t1 ON t1.incharge_comp_code = t0.comp_code
  JOIN tb_corp t2 ON t2.incharge_comp_code = t1.comp_code
 WHERE t0.mgr_emp_no = 111

 UNION ALL

SELECT t3.comp_code
  FROM tb_corp t0
  JOIN tb_corp t1 ON t1.incharge_comp_code = t0.comp_code
  JOIN tb_corp t2 ON t2.incharge_comp_code = t1.comp_code
  JOIN tb_corp t3 ON t3.incharge_comp_code = t2.comp_code
 WHERE t0.mgr_emp_no = 111

etc. Essa abordagem pode ser estendida para t4, t5, t6, ... até um número finito (razoável) de níveis.

Para uma abordagem mais recursiva, um programa armazenado no MySQL (PROCEDURE) pode ser escrito.