重庆小潘seo博客

当前位置:首页 > 重庆网络营销 > 小潘杂谈 >

小潘杂谈

如何让MySQL中单句实现无限层次父子关系查询

时间:2020-09-23 06:20:07 作者:重庆seo小潘 来源:
在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。 在 MySQL 中,这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值函数,函数不支持递归,所以通常都是用循环实现

在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。 在 MySQL 中,这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值函数,函数不支持递归,所以通常都是用循环实现,显得比较别扭。今天看到一个用单条语句实现的递归查询,想法独特,分享一下。

相关mysql视频教程推荐:《mysql教程》

表结构和数据CREATE TABLE table1(id int, name varchar(10), parent_id int); INSERT table1 VALUES (1, ‘Home’,0), (2, ‘About’,1), (3, ‘Contact’,1), (4, ‘Legal’,2), (5, ‘Privacy’,4), (6, ‘Products’,1), (7, ‘Support’,2);查询 id = 5 的所有父级SELECT ID.level, DATA.* FROM(SELECT@id as _id,(SELECT @id := parent_idFROM table1WHERE id = @id) as _pid,@l := @l+1 as levelFROM table1,(SELECT @id := 5, @l := 0 ) bWHERE @id > 0 ) ID, table1 DATA WHERE ID._id = DATA.id ORDER BY level;根据这个父级查询方法,很容易可以写出查所有子级的,下面的查询 id=2 的所有子级SELECT ID.level, DATA.* FROM(SELECT@ids as _ids,(SELECT @ids := GROUP_CONCAT(id)FROM table1WHERE FIND_IN_SET(parent_id, @ids)) as cids,@l := @l+1 as levelFROM table1,(SELECT @ids :=’1’, @l := 0 ) bWHERE @ids IS NOT NULL ) id, table1 DATA WHERE FIND_IN_SET(DATA.id, ID._ids) ORDER BY level, id本文讲解了如何让MySQL中单句实现无限层次父子关系查询,更多相关内容请关注小潘博客。

相关推荐:

带进度的SQL Server FileStream如何存取

当忘记 SQL Server 管理员密码该如何处理

浅析MySQL中concat以及group_concat的使用以上就是如何让MySQL中单句实现无限层次父子关系查询的详细内容,更多请关注小潘博客其它相关文章!