Mysql
 sql >> база данни >  >> RDS >> Mysql

Йерархична заявка в MySQL. (свързване чрез еквивалент за MySQL)

В MySQL няма естествена йерархична поддръжка на заявки.

За краен брой нива, които трябва да бъдат преминати, можем да напишем заявки, които получават резултат за всяко ниво и да комбинираме резултатите с UNION ALL оператор.

Или можем да напишем MySQL съхранена програма (процедура) за по-рекурсивен подход.

Като пример за подход, използващ собствена SQL заявка:

 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

и т.н. Този подход може да бъде разширен до t4, t5, t6, ... до известен (разумен) краен брой нива.

За по-рекурсивен подход може да се напише съхранена в MySQL програма (PROCEDURE).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване в select и актуализиране в една заявка

  2. Преносим начин за осигуряване на IP-базиран период на охлаждане?

  3. Как работи нещо OR DIE() в PHP?

  4. Обектите на Django queryset връщат None вместо 0, въпреки че базата данни има 0, съхранена като стойност на полето

  5. Вмъкване на JSON в MySQL с помощта на Python