mysql6支持connect by_在MySQL中是否有`connect by`替代方案?

正如评论中所说,mysql没有一个简短的方法.

但!

如果您可以更改数据库结构,则可以部署更好的设计来处理树状层次结构.

如果您遵循Bill Karwin的THIS TUTORIAL(HERE是引用该幻灯片教程的原始答案),您可以找到用于建模层次结构的4种方法:

> Adiacency List

>路径枚举

>嵌套集

>关闭表

现在,可能的最佳模型是第4个(我将其他3个模型的描述留给读者),它基本上需要2个表:一个用于元素,一个用于路径.在路径表(闭包表本身)中,您将存储从每个节点到每个后代的每条路径(不仅仅是直接子节点!).

建议同时保存每行的路径长度,因为它更容易查询树中的直接子项.

即使这个解决方案需要更多空间,它也具有最佳的整体性能并且使用起来非常简单:它完全不依赖于递归查询而且它将为整个数据集赋予参照完整性!

例如,要获取节点#4的每个子节点:

select a.*

from nodes a

join paths b

on a.node_id = b.descendant

where b.ancestor = 4

另一个例子:获取节点#11的所有祖先

select a.*

from nodes a

join paths b

on a.node_id = b.ancestor

where b.descendant = 11

需要删除节点#6的子树

delete from paths where descendant in

(select descendant from paths where ancestor = 6)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值