Mysql 需要解释此SQL闭包表查询吗
作为对的回应,Bill Karwin发布了以下查询,以在给定任何特定树节点id的情况下回调有序子树:Mysql 需要解释此SQL闭包表查询吗,mysql,sql,transitive-closure-table,Mysql,Sql,Transitive Closure Table,作为对的回应,Bill Karwin发布了以下查询,以在给定任何特定树节点id的情况下回调有序子树: SELECT d.`iD`, d.`subsectionOf`, CONCAT(REPEAT('-', p.`len`), d.`name`) as hier, p.`len`, p.`ancestor`, p.`descendant`, GROUP_CONCAT(crumbs.`ancestor`) AS breadcrumbs FROM `TreeData`
SELECT d.`iD`, d.`subsectionOf`,
CONCAT(REPEAT('-', p.`len`), d.`name`) as hier,
p.`len`, p.`ancestor`, p.`descendant`,
GROUP_CONCAT(crumbs.`ancestor`) AS breadcrumbs
FROM `TreeData` AS d
JOIN `TreePaths` AS p ON d.`iD` = p.`descendant`
JOIN `TreePaths` AS crumbs ON crumbs.`descendant` = p.`descendant`
WHERE p.`ancestor` = 1
GROUP BY d.`iD`
ORDER BY breadcrumbs;
我自己已经在我自己的几个项目中成功地使用了这个查询,但是我意识到我并不完全理解这个查询是如何工作的以及为什么工作的。我觉得我对闭包表的设计有相当的了解(主要是通过阅读Karwin关于SQL处理分层数据的文章)。尽管如此,我还是不愿意“手指跟踪”这个查询并解释它是如何构造结果集的
具体来说,我在理解“treepath”表(我理解为记录每个节点/叶的祖先和后代关系的实际闭包表)上的第二个连接时遇到了最大的困难。这是如何创建面包屑结果的