Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête hiérarchique dans MySQL. (connecter par équivalent pour MySQL)

Il n'y a pas de prise en charge native des requêtes hiérarchiques dans MySQL.

Pour un nombre fini de niveaux à traverser, nous pouvons écrire des requêtes qui obtiennent un résultat pour chaque niveau, et combiner les résultats avec un UNION ALL opérateur.

Ou, nous pouvons écrire un programme stocké MySQL (procédure) pour une approche plus récursive.

A titre d'exemple d'approche utilisant une requête SQL native :

 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. Cette approche peut être étendue à t4, t5, t6, ... jusqu'à un nombre fini (raisonnable) de niveaux.

Pour une approche plus récursive, un programme stocké MySQL (PROCEDURE) peut être écrit.