sql >> Database >  >> RDS >> Mysql

Hiërarchische query in MySQL. (verbind door equivalent voor MySQL)

Er is geen native hiërarchische ondersteuning voor zoekopdrachten in MySQL.

Voor een eindig aantal niveaus dat moet worden doorlopen, kunnen we query's schrijven die resultaten opleveren voor elk niveau, en de resultaten combineren met een UNION ALL telefoniste.

Of we kunnen een in MySQL opgeslagen programma (procedure) schrijven voor een meer recursieve benadering.

Als voorbeeld van een benadering met behulp van een native SQL-query:

 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

enz. Deze benadering kan worden uitgebreid tot t4, t5, t6, ... tot een (redelijk) eindig aantal niveaus.

Voor een meer recursieve benadering kan een in MySQL opgeslagen programma (PROCEDURE) worden geschreven.




  1. Kan tekenreekswaarde 1,2 niet doorgeven als invoer voor een orakel-query

  2. Foreign key tussen MySQL InnoDB-tabellen werkt niet... waarom?

  3. MySQL:hoe de woorden in een string te sorteren met behulp van een opgeslagen functie?

  4. Hoe krijg ik het resultaat van twee select-statements in een enkele rij?