小编典典

递归MySQL查询?

mysql

我有一组按层次结构组织的数据,应该可以增长到任意大小。我需要检索整个树,但是我无法弄清楚如何仅使用SQL来完成。我当前的解决方案是创建一个临时表,并使用递归函数依次查询树的分支,然后将结果存储在临时表中,随后我再次对其进行查询以产生所需的结果。

我的问题是,从本质上讲,我正在执行的联接正确吗?构造一个中间表,然后查询结果。似乎应该有一种使用联接的方法,但是MySQL文档仅涵盖检索有限深度的树的一部分。有没有办法做到这一点?我正在用PHP做到这一点。


阅读 294

收藏
2020-05-17

共1个答案

小编典典

MySQL不支持递归查询。

我建议您看一下比尔·卡文(Bill Karwin)的演讲,他在演讲中比较了存储分层数据的四种不同模型,并探讨了它们的优缺点:

  • 邻接表
  • 路径枚举
  • 嵌套集
  • 封闭表

幻灯片48显示了每种模型的某些类型查询的相对难度。从您的问题看来,您似乎对“查询子树”最感兴趣,对于它来说,邻接表(当前使用的模型)在这四个表中表现最差。

另外,如果您只想选择整个树(如表中的所有数据一样),则可以使用简单查询 SELECT * FROM yourtable并在客户端中重建树结构。

2020-05-17