欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

递归有关问题解决办法,求大神帮帮忙!

更新时间: 2014-01-05 02:17:48 责任编辑: Author_N1

 

递归问题解决方法,求大神帮帮忙!!
Create table aa (ID varchar(20),ItemCode varchar(20),BOMUsage varchar(20))
GO
insert into  aa(ID,ItemCode,BOMUsage)  
select 'S20011','13134313',         '3' union all
select '215131',   'S20011',        '3' union all
select 'Z10211',   'Z10211' ,       '3' union all
select 'Z10311',   'Z10211',        '3' union all
select 'Z10411',   'Z10311' ,       '3' union all
select 'Z10051',   '1313131',       '3' union all
select 'Z10811',   'Z10051',        '3' union all
select 'Z21011',   'Z15411' ,       '3' union all
select 'Z13211',   '1313131' ,      '3' union all
select 'Z10431',   'Z11211',        '3' union all
select 'Z14511',   'Z14511' ,       '3' union all
select 'Z15411',   '1313131',       '3' union all
select 'Z11211',   '1313131',       '3' union all
select 'S20011',   '13134313' ,     '3' union all
select '215131',   'S2001' ,        '3' union all
select 'Z10211',   '1313131' ,      '3' union all
select 'Z10311',   'S20011'  ,      '3' union all
select 'Z10411',   '1313131',       '3' union all
select 'Z10051',   '1313131' ,      '3' union all
select 'Z10811',   '1313131',       '3' union all
select 'Z21011',   'Z10811' ,       '3' union all
select 'Z13211',   '1313131' ,      '3' union all
select 'Z14511',   'Z13211',        '3' union all
select 'Z15411',  'Z10431',         '3' union all
select 'Z11211',   '1313131',       '3'
GO
Create table bb (VerID varchar(20),BOMUsg varchar(20))
GO
insert into bb(VerID,BOMUsg)
select 'S20011','z' union all
select '215131','3' union all
select 'Z10211','z' union all
select 'Z10311','3' union all
select 'Z10411','3' union all
select 'Z10051','3' union all
select 'Z10811','3' union all
select 'Z21011','z' union all
select 'Z13211','3' union all
select 'Z10431','z' union all
select 'Z14511','3' union all
select 'Z15411','3' union all
select 'Z11211','z'

数据如上,想在想用递归方法用aa表的ItemCode去匹配bb表的VerID ,得出的bb表的BOMUsg如果为z的话就把为z的数据取出来放入随便一张表里而匹配出还是为3的话就继续往下递归匹配bb表出现z的话也是把为z的数据取出来放入刚刚那一张表里,为3的话继续递归,中间如果出现BOMUsg为NULL的数据不管,只要继续往下递归,最后能得出BOMUsg都为NULL的数据,我会对BOMUsg为NULL的数据和为z的数据进行处理。求各位大神帮帮忙!
--参考方法--
SELECT b.* 
FROM aa a LEFT JOIN bb b ON a.itemcode=b.verid
WHERE b.bomusg='z'
UNION 
SELECT b.* 
FROM aa a LEFT JOIN bb b ON a.itemcode=b.verid
WHERE b.bomusg IS NULL

--参考方法--
用CTE支持递归查询。下面的语句是对B表的递归,你可以根据你的需要改造一下。
WITH cc AS(
SELECT
t1.VerID, t1.BOMUsg
FROM dbo.bb t1
WHERE t1.BOMUsg = 'z'
UNION ALL
SELECT
t2.VerID, t2.BOMUsg
FROM cc AS t1 INNER JOIN dbo.bb AS t2 ON t1.VerID = t2.VerID
WHERE t2.BOMUsg = '3'
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:17:48
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8148/
本文WWW.DOC100.NET DOC100.NET版权所有。