【发布时间】:2018-09-08 09:42:54
【问题描述】:
我不太明白递归查询是如何工作的以及如何解决这个问题。我们得到了左边的表格,结构看起来像右边的树:
ID | Parent 1
1 null / \
2 1 2 3
3 1 \
4 3 4
5 4 / \
6 4 5 6
7 6 \
7
我知道如何获取每个节点的所有父节点...但我不知道如何找到树的最大深度。这意味着我必须找出这棵树有多少层。我们没有得到更多信息
如果您能给我一个 mysql 的解决方案,我将非常感激,但是任何 sql 语句都会帮助我解决这个问题
提前致谢!
【问题讨论】:
-
哪个版本的mysql?最新版本支持递归 CTE 查询,但早期版本没有此功能。取决于您的版本,查询会有所不同。
-
如果您的信息存储在数据库中,例如在父列中,您可能可以使用 COUNT 来获取该列中有多少条记录,结果是深度。 ps,使用count distinct仅获取深度而不是所有父母,在您的示例中使用count distinct您不考虑值2和5,而只考虑1,3,4,6,7所以结果必须是= 5 ...如果我明白你的问题;)
-
如果您不在 MySQL 8 上,下面 Lucasz 的递归 CTE 将无法工作,因此您可以使用 this answer 中的过程
-
非常感谢你们的 cmets,我忘了提到我有 mysql 8.0,我可以使用递归。 @Lukasz Szozda 的回答完美!
标签: mysql sql tree recursive-query