2017-01-27 9 views
1

私はこれらのトウテーブルを持っています。表1の2列目の項目は、他の項目に関連している可能性があり、その関係は、表に、私は、SQLサーバーで再帰クエリを使用して、この結果、表1を取得できますか2.再帰クエリで希望するテーブルを取得する方法

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

です。

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

編集

答えて

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 
+1

作品。しかし、彼は*関連しているかもしれないと書いているので、彼はまた788,510を望んでいるかもしれないが(510がt2に存在しないという前提で)、サンプルを短く保つためにそれを含んでいない。オペレーションが望む場合に備えて、この出力に対して別のケースを追加することをお勧めします。 – user1429080

+0

@stephenあなたの答えに感謝しますが、私が今見ているように、私は尋ねたものとは少し違ったものを求めています。私は質問を編集しました。表2では、Code_B列のいくつかのコードが上記のコードで繰り返され、結果表の同じ行が複数回繰り返されます。最後の行に「Distinct」を追加することで、問題は解決されると思います。 –

+0

@ user1429080はい。 '788,510 'も欲しいです。そして、それを見るために、再帰的クエリの最初の部分で'内部結合'を '左結合 'に置き換えることができます。 –

関連する問題