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

Hierarkisk forespørgsel i MySQL. (tilslut med tilsvarende for MySQL)

Der er ingen indbygget hierarkisk forespørgselsunderstøttelse i MySQL.

For et begrænset antal niveauer, der skal krydses, kan vi skrive forespørgsler, der får resultater for hvert niveau, og kombinere resultaterne med en UNION ALL operatør.

Eller vi kan skrive et MySQL-lagret program (procedure) for en mere rekursiv tilgang.

Som et eksempel på tilgang til brug af en indbygget SQL-forespørgsel:

 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

osv. Denne tilgang kan udvides til t4, t5, t6, ... ned til et eller andet (rimeligt) begrænset antal niveauer.

For en mere rekursiv tilgang kan et MySQL-lagret program (PROCEDURE) skrives.




  1. SQL Server Index Baglæns Scan:Forståelse og justering af ydeevne

  2. virtualenv, mysql-python, pip:nogen der ved hvordan?

  3. Udfyld INSERT med resultat fra SELECT

  4. Hvordan kalder man en mysql lagret procedure med argumenter fra kommandolinjen?