mysql递归函数

创建了一个包含产品信息的示例表,包括产品ID、名称、子类别和类别。接着插入了手机和家电产品的数据。然后,建立了销售表并生成了模拟的销量数据。此外,展示了使用递归生成斐波那契数列和1-100的和,以及如何在数据库中递归获取菜单全路径。
摘要由CSDN通过智能技术生成
-- 创建示例表
create table products(
  product_id integer not null primary key,
  product_name varchar(100) not null unique,
  product_subcategory varchar(100) not null,
  product_category varchar(100) not null
);

insert into products values(1, 'iPhone 11', '手机', '手机通讯');
insert into products values(2, 'HUAWEI P40', '手机', '手机通讯');
insert into products values(3, '小米10', '手机', '手机通讯');
insert into products values(4, 'OPPO Reno4', '手机', '手机通讯');
insert into products values(5, 'vivo Y70s', '手机', '手机通讯');
insert into products values(6, '海尔BCD-216STPT', '冰箱', '大家电');
insert into products values(7, '康佳BCD-155C2GBU', '冰箱', '大家电');
insert into products values(8, '容声BCD-529WD11HP', '冰箱', '大家电');
insert into products values(9, '美的BCD-213TM(E)', '冰箱', '大家电');
insert into products values(10, '格力BCD-230WETCL', '冰箱', '大家电');
insert into products values(11, '格力KFR-35GW', '空调', '大家电');
insert into products values(12, '美的KFR-35GW', '空调', '大家电');
insert into products values(13, 'TCLKFRd-26GW', '空调', '大家电');
insert into products values(14, '奥克斯KFR-35GW', '空调', '大家电');
insert into products values(15, '海尔KFR-35GW', '空调', '大家电');

create table sales(
  product_id integer not null,
  sale_time timestamp not null,
  quantity integer not null
);

-- 生成模拟销量数据
insert into sales
with recursive s(product_id, sale_time, quantity) as (
  select product_id, '2022-04-01 00:00:00', floor(10*rand(0)) from products
  union all
  select product_id, sale_time + interval 1 minute, floor(10*rand(0))
  from s 
  where sale_time < '2022-04-01 10:00:00'
)
select * from s;
-- 斐波拉契数列
WITH RECURSIVE fibonacci (n, fib_n, next_fib_n) AS
(
  SELECT 1, 0, 1
  UNION ALL
  SELECT n + 1, next_fib_n, fib_n + next_fib_n
    FROM fibonacci WHERE n < 10
)
SELECT * FROM fibonacci;

-- 1-100的和
WITH RECURSIVE t1 (num) AS
(
  SELECT 1
	UNION ALL
	SELECT num + 1
	  FROM t1
		WHERE num < 100
)
SELECT sum(num) FROM t1;

ruoyi菜单表递归出全路径

with recursive temp(id,name,pid,paths) as
       (
           select menu_id,menu_name,parent_id,cast(menu_name as char(1000)) paths from sys_menu where parent_id=0
           union all
           select s.menu_id,s.menu_name,s.parent_id,concat(paths,'>',s.menu_name) from temp t join sys_menu s on (t.id=s.parent_id)
       )
select * from temp order by id;

MySQL 8提供了与递归处理相关的函数和功能。其中,通用表表达式(Common Table Expressions,CTE)是一种常用的递归查询方法。通过CTE,我们可以使用WITH RECURSIVE关键字进行递归操作。下面是一个示例: ``` WITH RECURSIVE cte AS ( -- 初始化:获取菜单表中pid为0的数据作为cte的初始数据 SELECT * FROM sys_menu WHERE pid=0 UNION ALL -- 开始检查是否循环 -- 将菜单表的pId与cte表的id进行关联合并到cte,如果cte数据未增加则退出 SELECT sm.* FROM sys_menu sm, cte WHERE sm.pid = cte.id ) SELECT * FROM cte ORDER BY pid; ``` 在这个示例中,我们首先初始化了cte,将菜单表中pid为0的数据作为初始数据。然后,通过UNION ALL将cte的数据与菜单表中与cte关联的数据进行合并,如果cte的数据未增加,则退出递归。最后,我们通过SELECT语句从cte中查询结果并按照pid排序。 除了CTE,MySQL 8还提供了其他递归处理的函数和方法。你可以根据具体的需求选择适合的方式来实现递归查询。123 #### 引用[.reference_title] - *1* *3* [MySQL函数-递归函数](https://blog.csdn.net/qq_40301202/article/details/124322220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* [Mysql8 的 递归函数](https://blog.csdn.net/qq_45947849/article/details/124928728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值