问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据库语句的递归查询求助

发布网友 发布时间:2022-04-26 11:49

我来回答

5个回答

热心网友 时间:2022-04-08 07:16

应该是这样:

with qry as (select user_id,parent_id from tab where user_id = 32
union all
select tab.user_id,tab.parent_id from tab,qry
where tab.parent_id = qry.id)
select * from qry ;

我用mysql5.0.22,不支持上述语法,oracle就可以(sqlserver应该也可以):
create table tab1(user_id int, parent_id int);
insert into tab1 values(1,null);
insert into tab1 values(32,1);
insert into tab1 values(101,32);
insert into tab1 values(102,32);
insert into tab1 values(201,101);
insert into tab1 values(202,101);
insert into tab1 values(203,102);
insert into tab1 values(204,102);
select * from tab1;
with qry(user_id,parent_id) as (select user_id,parent_id from tab1 where user_id = 32
union all
select tab1.user_id,tab1.parent_id from tab1,qry
where tab1.parent_id = qry.user_id
)
select * from qry;

所以,mysql没有办法了,只有写函数,用循环来实现了。

热心网友 时间:2022-04-08 08:34

就和C++写递归一样的吧~~
do while,如果这个点没有子节点了,就返回上一个节点

热心网友 时间:2022-04-08 10:09

写一个函数,只查询某个节点的子节点,然后递归保存

热心网友 时间:2022-04-08 12:00

-------- 写一个自定义函数 ---------

delimiter //
drop function if exists getChildren //
create function getChildren(pid int) returns varchar(500)
begin
declare childrenId varchar(500);
declare temp varchar(300);
set childrenID = "";
set temp = cast(pid as char);
while not isnull(temp) do
set childrenId = concat(childrenId, ",", temp);
select group_concat(user_id) into temp from 你的表名 where find_in_set(parent_id, temp) > 0;
end while;
return childrenId;
end //
delimiter ;
------------------
下面是调用的测试示例
------------------
mysql> select * from tree_recursion;
+----+--------+
| id | parent |
+----+--------+
| 1 | NULL |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 3 |
| 7 | 4 |
| 8 | 5 |
| 9 | 8 |
+----+--------+
9 rows in set (0.00 sec)
mysql> # 找节点 2 下的所有结点
mysql>
mysql> delimiter //
mysql> drop function if exists getChildren //
Query OK, 0 rows affected (0.00 sec)
mysql> create function getChildren(pid int) returns varchar(500)
-> begin
-> declare childrenId varchar(500);
-> declare temp varchar(300);
->
-> set childrenID = "";
-> set temp = cast(pid as char);
->
-> while not isnull(temp) do
-> set childrenId = concat(childrenId, ",", temp);
-> select group_concat(id) into temp from tree_recursion where find_in_set(parent, temp) > 0;
-> end while;
->
-> return childrenId;
-> end //
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> delimiter ;
mysql>
mysql> select * from tree_recursion where find_in_set(id, getChildren(2));
+----+--------+
| id | parent |
+----+--------+
| 2 | 1 |
| 4 | 2 |
| 5 | 2 |
| 7 | 4 |
| 8 | 5 |
| 9 | 8 |
+----+--------+
6 rows in set (0.02 sec)
mysql>

热心网友 时间:2022-04-08 14:08

我之前也遇到你这样的问题, 如果打算用一条SQl查询某个节点下面的所有叶子节点话,需要在表的结果设计上做点功夫,比如做类似这样的表结构,
ClassID 表示当前节点 类别ID
ClassName 表示当前节点 类别名称
ParentID 表示当前的父亲节点ID
Parent_Path----------->这个列比较关键 就是记录当前节点到 根节点的整个路径如数据0,1,11,111

这样 你在用Sql语句时候查询时候 ,比如查询ClassID =9的所有子节点,Sql 语句就可以这样写Parent_Path like '%,9,%'
希望对你有帮助
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
U盘更新专用需要电脑打开怎么让我的U盘和电脑文件夹同步更新啊_百度知 ... 为什么我的硬盘一打开就弹出对话框说选择打开方式. 倒霉的是右键也打... 磁盘右键是打开方式怎么办 我双机盘符总是打开 打开方式 让我选择,右健第一项是打开.不知道是中了... 罗技Lightspeed怎么用? 罗技无线鼠标怎么样?怎么连接电脑使用? 为什么不建议去融资公司上班 融资担保公司一般账务处理及所涉及的会计科目有哪些 月经期间可以游泳吗 经期能不能游泳 mysql多级查询 mysql多级树形结构数据,随着时间推移下级推荐会员级数会回来越多,如... mysql查询一个节点的根节点 mysql 根据时间查询某个元素的上一个元素与下一个元素 mysql 多字段排序查询上一条下一条,怎么实现?? mysql查询一个表,实现递归查询 mysql怎么查询树形结构的所有上级,你这个问题是怎么解决的?求指导_百 ... mysql如何根据很多子节点查询出父节点,只要一条路径上的 数据库查询:查询父节点数据下的所有终结子节点 MYSQL 查询树形结构数据,查询某个节点下的所有子节点数据。 手机音响孔进水了怎么办 Excel操作技巧,用RANK函数一键排名,省时省力! 钉钉学校刷脸通知怎么弄? 钉钉打卡录脸录错了退群再进就可以重新录了吧? 钉钉魔点校园请假人脸录入怎么重新提交重新录入 新股申购需要什么条件?自己的炒股账号里必须要有价值10000元股票或现金才能申购么? 打新股的门槛是什么 怎样把CR2格式转换为JPG 格力空调显示E1是什么意思? 格力变频空调开机显示ee怎么解决 mysql如何递归汇总? MySQL 数据如何查询一个用户的所有下级用户 mysql优化查询速度 为什么恒瑞医药股票这么便宜 现在那些医药股票可以买 华东医药股票怎么看? 华东医药股票何时跌到底 华东医药股票最低是多少钱 人福医药这支倒霉股昨天卖今天涨,今天买回来又开始跌,倒霉股市,倒霉国家 华北制药今天股票的走势 华东医药股票今天走势 今日股市查询华北制药 华北制药股票今天的股价 华北制药今天股票什么价格 唐字艺术签名怎么写 签名设计中,唐字要怎样写才好看 签名设计中,唐字要怎样写才好看。 唐有光连体字怎么写? 唐翠如 艺术签名 唐天明 这三个字怎么写好看?