我在一个表中定义了MySQL数据库中存在的层次关系的三个字段。
Table Name : tb_corp
--------------------------------------------
comp_code | incharge_comp_Code | mngr_emp_no
A | | 111
--------------------------------------------
B | A |
--------------------------------------------
C | B |
--------------------------------------------
如何编写查询以获取MNGR_EMP_NO = 111负责的所有comp_code。根据上表,111负责三家公司(A,B和C)。原因是一家公司负责B公司,因此B公司负责C公司,因此A也负责C公司。(a-> b)(b-> c)==(a-> c)
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存储的程序(过程)。