sql >> Databasteknik >  >> RDS >> Mysql

Hierarkisk fråga i MySQL. (anslut med motsvarande för MySQL)

Det finns inget inbyggt hierarkiskt frågestöd i MySQL.

För ett ändligt antal nivåer som ska passeras kan vi skriva frågor som får resultat för varje nivå och kombinera resultaten med en UNION ALL operatör.

Eller så kan vi skriva ett MySQL-lagrat program (procedur) för ett mer rekursivt tillvägagångssätt.

Som ett exempel på tillvägagångssätt med en inbyggd SQL-fråga:

 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. Detta tillvägagångssätt kan utökas till t4, t5, t6, ... ner till något (rimligt) ändligt antal nivåer.

För ett mer rekursivt tillvägagångssätt kan ett MySQL-lagrat program (PROCEDUR) skrivas.




  1. Ditt lösenord uppfyller inte gällande policykrav

  2. Tvinga användare att ha den senaste versionen av Android-appen

  3. Varför får jag resurs-id #4 när jag använder print_r() på en array i PHP?

  4. Bästa sättet att lagra och hämta synonymer i databasen mysql