Mysql
 sql >> Database >  >> RDS >> Mysql

Query gerarchica in MySQL. (connetti per equivalente per MySQL)

Non esiste un supporto nativo per le query gerarchiche in MySQL.

Per attraversare un numero finito di livelli, possiamo scrivere query che ottengano risultati per ogni livello e combinare i risultati con un UNION ALL operatore.

Oppure, possiamo scrivere un programma memorizzato MySQL (procedura) per un approccio più ricorsivo.

Come esempio di approccio utilizzando una query 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

ecc. Questo approccio può essere esteso a t4, t5, t6, ... fino a un numero finito (ragionevole) di livelli.

Per un approccio più ricorsivo, è possibile scrivere un programma memorizzato MySQL (PROCEDURE).