我有这些两张桌子。表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
被修改
答案 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