mysql lateral_MySQL 8.0.14的LATERAL派生表

本文介绍了MySQL 8.0.14引入的LATERAL派生表功能,通过示例解释如何使用此功能创建随机图。首先,创建了一个包含20个节点的表,然后使用LATERAL解决在每个节点上生成不同随机目标节点的问题,避免了所有节点连接到相同目标的错误。最后,展示了如何动态改变目标节点的数量,使得每个原始节点可以连接到0到4个随机目标节点。LATERAL派生表使得根据每行数据执行不同的计算成为可能。
摘要由CSDN通过智能技术生成

作者:Guilhem Bichot 译:徐轶韬

在MySQL 8.0.14中,添加了LATERAL派生表的功能。在线手册https://dev.mysql.com/doc/refman/8.0/en/lateral-derived-tables.html中描述了语法,并提供了如何使用该功能在表中查找最大值的示例。

在本文中,我将利用LATERAL解决另一个问题:假设我们有一堆节点,并希将每个节点与其他节点连接生成一个“随机图”。

我们从一个nodes表开始:

create table nodes(id int);

这个表将填充20个节点,使用递归通用表表达式Common Table Expression(MySQL 8.0.1的 另一个功能):

insert into nodeswith recursive cte(n) as(select 1union allselect n+1 from cte where n<20)select * from cte;

现在,让我们在图上创建随机的边。它们是有方向的(具有“from”和“to”)。

create table edges (from_id int, to_id int);

对于每个原始节点,让我们选择两个随机目标节点,并将它们连接到原始节点。

如果我们使用普通派生表来存储两个目标节点:

insert into edges(from_id, to_id)select origin_nodes.id, target_nodes.idfrom nodes as origin_nodes,(select idfrom nodesorder by rand()limit 2) as target_nodes;

在执行INSERT查询时&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值