SQL问题 实现递归查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL问题 实现递归查询相关的知识,希望对你有一定的参考价值。

哪位高手能详解一下 各种数据库 如SQL server、mysql、Oracle、DB2 实现递归查询的专门语句。 再详解下利用存储过程查询的方法。

下面是我做过的题目.你是哪个表,在换一下名称 create proc p_recursion @v_uid varchar(5)
as
begin
--创建一个临时表用于存储结果
create table #TBuidres(ID varchar(5), UID varchar(5))
--插入初始条件
insert #TBuidres(ID, UID)
select ID, UID from TBuid where ID = @v_uid

declare @v_temp varchar(5)
set @v_temp = isnull(@v_temp,\'\')

--为临时表打开一个游标
declare vp_i cursor for select ID from #TBuidres
open vp_i
fetch next from vp_i into @v_temp

--根据临时表中ID去寻找TBuid中对应UID的记录插入临时表
while @@FETCH_STATUS = 0
begin
insert #TBuidres(ID,UID)
select ID,UID from TBuid where UID = @v_temp

fetch next from vp_i into @v_temp
end

--返回结果
select ID,UID from #TBuidres

--处理游标后事
close vp_i
deallocate vp_i
end

--存储过程到此结束---------------------------------------------------------------------------------
--运行
exec p_recursion \'001\'
参考技术A --sql 2005 递归--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([id] int,[col1] varchar(8),[col2] int)
insert [tb]
select 1,'河北省',0 union all
select 2,'邢台市',1 union all
select 3,'石家庄市',1 union all
select 4,'张家口市',1 union all
select 5,'南宫',2 union all
select 6,'坝上',4 union all
select 7,'任县',2 union all
select 8,'清河',2 union all
select 9,'河南省',0 union all
select 10,'新乡市',9 union all
select 11,'aaa',10 union all
select 12,'bbb',10;with t as(
select * from [tb] where col1='河北省'
union all
select a.* from [tb] a ,t where a.col2=t.id)
select * from t
/*
id col1 col2
----------- -------- -----------
1 河北省 0
2 邢台市 1
3 石家庄市 1
4 张家口市 1
6 坝上 4
5 南宫 2
7 任县 2
8 清河 2(8 行受影响)
*/

mysql递归查询语句

参考技术A mysql递归查询,mysql中从子类ID查询所有父类(做无限分类经常用到)

由于mysql 不支持类似 oracle with ...connect的 递归查询语法
之前一直以为类似的查询要么用存储过程要么只能用程序写递归查询.

现在发现原来一条sql语句也是可以搞定的

先来看数据表的结构如下:

id name parent_id
---------------------------
1 Home 0
2 About 1
3 Contact 1
4 Legal 2
5 Privacy 4
6 Products 1
7 Support 1
我要的要求是根据一个分类ID(这个分类ID可能是一个子分类),得到所有的父分类,下面是相应的SQL:

SELECT T2.id, T2.name
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 5, @l := 0) vars,
table1 h
WHERE @r <> 0) T1
JOIN table1 T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC

代码@r := 5标示查询id为5的所有父类。结果如下
1, ‘Home’
2, ‘About’
4, ‘Legal’
5, ‘Privacy’

自己仿照这看一下!

以上是关于SQL问题 实现递归查询的主要内容,如果未能解决你的问题,请参考以下文章

sql 递归查询

sql server 递归查询

sql用啥方法可以实现递归函数?

SQL Server CTE 递归查询全解

sql 怎么递归查询的方法:

SQL Server---实现递归查询(使用公共表表达式)