MySQL 中的分层查询。 (按 MySQL 的等效连接)
Hierarchical Query in MySQL. (connect by equivalent for MySQL)
我在 table 中有三个字段,它们定义 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。根据上面的table,111负责三个公司(A,B,C)。原因是A公司负责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 存储程序 (PROCEDURE)。
我在 table 中有三个字段,它们定义 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。根据上面的table,111负责三个公司(A,B,C)。原因是A公司负责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 存储程序 (PROCEDURE)。