mysql递归自身连接_Mysql递归连接

基于这种结构

create table category (id int, mr varchar(10), category_fk int);

create table products (id int, name varchar(100), category_fk int);

insert category values

(1, 'cat1', null),(2, 'cat2', 1),(3, 'cat3', 2),(4, 'cat4', 3),

(5, 'cat5', null),(6, 'cat6', null),(7, 'cat7', 5);

insert products values

(1, 'product A', 4),

(2, 'product B', 3),

(3, 'product C', 5),

(4, 'product D', 7),

(5, 'product E', 7),

(6, 'product F', 1);查询

select p.name, substr(concat(

ifnull(concat('/',c4.mr),''),

ifnull(concat('/',c3.mr),''),

ifnull(concat('/',c2.mr),''),

ifnull(concat('/',c1.mr),'')),2)

from products p

left join category c1 on p.category_fk = c1.id

left join category c2 on c1.category_fk = c2.id

left join category c3 on c2.category_fk = c3.id

left join category c4 on c3.category_fk = c4.id笔记

substr剥离第一个/

concat与联接(父亲优先)的顺序相反

concat'/'和null返回null,更改为'',否则会使主concat为NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值