日期:2014-05-17  浏览次数:20686 次

SQL高手请进来看看,关于父子关系的递归问题
两张表是1对多的关系,也就主从表关系

table1:

C# code

LotCode   WipID
  792      28
  793      30
  796      33
...
...



table2:
C# code

LotCode WipID
  85     28
  793    28
  88     28
  89     28
  796    30
  85     30
  26     33
...
...



现在要求输入一个LotCode,返回他对应的所有LotCode集合

比如说输入了LotCode = 792,则查询对应WipID = 28在table2中有四行数据,其中一行LotNo = 793又包含在table1中,则根据WipID = 30,继续查找到两行记录,其中一行LotNo = 796在table1中存在则继续查找..直到没有为止

就上述几行的例子返回的集合应该是{793,796}


求实现的代码...

------解决方案--------------------
SQL code

CREATE TABLE #T1 (
    LotCode INT,
    WipID   INT
)

CREATE TABLE #T2(
    LotCode INT,
    WipID   INT
)

INSERT INTO #T1
        ( LotCode, WipID )
VALUES  ( 792,28),(793,30),(796,33)


INSERT INTO #T2
        ( LotCode, WipID )
VALUES  (85,28),(793,28),(88,28),(89,28),(796,30),(85,30),(26,33)


;WITH TEMP AS(
 SELECT  A.LotCode,B.LotCode l2,A.WipID
 FROM   #T1 A
 JOIN   #T2 B ON A.WipID = B.WipID
 WHERE  A.LotCode = 792
 UNION ALL
 SELECT  C.l2 AS LotCode,E.LotCode l2,E.WipID
 FROM   TEMP C
 JOIN   #T1 B ON C.l2 = B.LotCode
 JOIN   #T2 E ON B.WipID = E.WipID
)
SELECT  LotCode
FROM temp 
WHERE LotCode <> 792
GROUP BY LotCode


DROP TABLE #T1,#T2