我试图了解MySQL递归查询的工作原理,并按照我想要的方式获取数据。
现在我有以下SQL
SELECT `Library`.*, l2.*, l3.*
FROM `Library`
LEFT JOIN `Library` as `l2` on `l2`.`subsectionOf`=`Library`.`iD`
LEFT JOIN `Library` as `l3` on `l3`.`subsectionOf`=`l2`.`iD`
WHERE `Library`.`iD` = 0x02
ORDER BY `Library`.`subsectionOrder`, `l2`.`subsectionOrder`, `l3`.`subsectionOrder`
这为我提供了一个三层深度的数据层次结构,其布局如下:
Layer 1 fields, Layer 2 fields, Layer 3 fields
1.如何使查询适用于n个深度级别?
1.如何使结果相互叠加,而不是在右侧添加字段?
Layer 1 Row
Layer 2 Row
Layer 2 Row
Layer 3 Row
Layer 3 Row
Layer 2 Row
Layer 3 Row
Layer 2 Row
3条答案
按热度按时间j2qf4p5b1#
MySQL不支持递归SQL查询。大多数人以不同的方式存储分层数据,以便在单个查询中获得整个树。
请参阅我的回答:将平面表解析为树的最有效/最优雅的方法是什么?
我有一个演示文稿Models for Hierarchical Data with SQL and PHP,我在我的书SQL Antipatterns Volume 1: Avoiding the Pitfalls of Database Programming中写了关于树结构数据的内容。
@Quassnoi在回答SO上的Hierarchical queries in MySQL时给出了另一个棘手的解决方案。
agyaoht72#
您的查询不是递归查询;这只是一张table自我连接了三次。
5分钟的谷歌搜索会告诉你,到目前为止,MySQL不支持真正的递归查询。
k5hmc34c3#
MySQL不支持递归查询。
在其他数据库中,可以使用通用表表达式(CTE)执行递归,例如SQL Server、Postgres和DB2。对于Oracle,可以使用CTE(从11g开始)或非标准
CONNECT BY
执行递归。MySQL不支持这两个选项。