Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hierarchische Abfrage in MySQL. (durch Äquivalent für MySQL verbinden)

Es gibt keine native hierarchische Abfrageunterstützung in MySQL.

Für eine endliche Anzahl von zu durchlaufenden Ebenen können wir Abfragen schreiben, die Ergebnisse für jede Ebene erhalten, und die Ergebnisse mit einem UNION ALL kombinieren Betreiber.

Oder wir können ein gespeichertes MySQL-Programm (Prozedur) für einen rekursiveren Ansatz schreiben.

Als Beispiel für einen Ansatz mit einer nativen SQL-Abfrage:

 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

usw. Dieser Ansatz kann auf t4, t5, t6, ... bis zu einer (angemessenen) endlichen Anzahl von Ebenen erweitert werden.

Für einen eher rekursiven Ansatz kann ein gespeichertes MySQL-Programm (PROCEDURE) geschrieben werden.