临时表实现mysql递归_mysql递归查询实现方法

在Oracle 中有一个 Hierarchical Queries 通过CONNECT BY 可以方便的查了所有当前节点下的所有子节点。

在MySQL的目前版本中还没有对应的功能。

在MySQL中如果是有限的层次,比如事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则可以直接通过left join 来实现。

但有时无法控制树的深度。这时就需要在MySQL中用存储过程来实现或在你的程序中来实现这个递归。

本文讨论一下几种实现的方法。

样例数据:

复制代码 代码示例:

mysql> create table treeNodes

-> (

->  id int primary key,

->  nodename varchar(20),

->  pid int

-> );

Query OK, 0 rows affected (0.09 sec)

mysql> select * from treenodes;

+----+----------+------+

| id | nodename | pid  |

+----+----------+------+

|  1 | A        |    0 |

|  2 | B        |    1 |

|  3 | C        |    1 |

|  4 | D        |    2 |

|  5 | E        |    2 |

|  6 | F        |    3 |

|  7 | G        |    6 |

|  8 | H        |    0 |

|  9 | I        |    8 |

| 10 | J        |    8 |

| 11 | K        |    8 |

| 12 | L        |    9 |

| 13 | M        |    9 |

| 14 | N        |   12 |

| 15 | O        |   12 |

| 16 | P        |   15 |

| 17 | Q        |   15 |

+----+----------+------+

17 rows in set (0.00 sec)

树形图:

1:A

+-- 2:B

|    +-- 4:D

|    +-- 5:E

+-- 3:C

+-- 6:F

+-- 7:G

8:H

+-- 9:I

|    +-- 12:L

|    |    +--14:N

|    |    +--15:O

|    |        +--16:P

|    |        +--17:Q

|    +-- 13:M

+-- 10:J

+-- 11:K

方法一:利用函数来得到所有子节点号。

创建一个function getChildLst, 得到一个由所有子节点号组成的字符串.

复制代码 代码示例:

mysql> delimiter //

mysql>

mysql> CREATE FUNCTION `getChildLst`(rootId INT)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值