如何通过递归查询获得所需的 table
How to get desired table with recursive Query
我有这些 tables。 table 1 的第 2 列中的项目也可能与其他项目相关,它们的关系在 table 2.
中
t1 Code_A|Code_B t2 Code_B|Code_C
------+------ ------+------
788 | 501 501 | 503
788 | 510 503 | 507
... | ... 501 | 504
如何在 sql 服务器中使用递归查询得到 table 1 作为这个结果。
result Code_A|Code_B
------+------
788 | 501
788 | 503
788 | 507
788 | 504
已编辑
尝试 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
我有这些 tables。 table 1 的第 2 列中的项目也可能与其他项目相关,它们的关系在 table 2.
中 t1 Code_A|Code_B t2 Code_B|Code_C
------+------ ------+------
788 | 501 501 | 503
788 | 510 503 | 507
... | ... 501 | 504
如何在 sql 服务器中使用递归查询得到 table 1 作为这个结果。
result Code_A|Code_B
------+------
788 | 501
788 | 503
788 | 507
788 | 504
已编辑
尝试 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