如何使用递归查询获得所需的表

时间:2017-01-27 08:58:54

标签: sql sql-server recursive-query

我有这些两张桌子。表1第2栏中的项目也可能与其他项目有关,其关系见表2。

 t1  Code_A|Code_B   t2   Code_B|Code_C
     ------+------        ------+------
     788   |   501        501   |   503
     788   |   510        503   |   507
     ...   |   ...        501   |   504

如何在sql server中使用递归查询获得表1作为此结果。

result  Code_A|Code_B  
        ------+------       
        788   |   501      
        788   |   503        
        788   |   507
        788   |   504

被修改

1 个答案:

答案 0 :(得分:3)

尝试使用Recursive CTE

DECLARE @t1 TABLE (Code_A INT, Code_B INT)
DECLARE @t2 TABLE (Code_B INT, Code_C INT)


INSERT @t1 VALUES (788, 501), (788, 510)
INSERT @t2 VALUES (501, 503), (503, 507)


;WITH cte(code_A, code_B)
AS (
    SELECT t1.code_A, t1.code_B
    FROM @t1 t1
    LEFT JOIN @t2 t2 ON t2.Code_B = t1.Code_B
    UNION ALL
    SELECT c.code_A, t2.code_C
    FROM cte c
    INNER JOIN @t2 t2 ON t2.Code_B = c.code_B
)
SELECT DISTINCT * FROM cte

结果:

code_A      code_B
----------- -----------
788         510
788         501
788         503
788         507