2016-09-12 8 views
0

この投稿のタイトルはおそらく正しくありません。私は以下のようなテーブルを持っており、特定の値に関連するすべてのレコードを選択するSQLが必要です。これはIDの値を追跡する「履歴」テーブルであり、IDの値を追跡しています。レコード2つ及び2と3となる、多分2及び3にマージ1つの分割及び例えば4になる:上記の例でSQLは最後の選択の結果に基づいてレコードを選択し続ける

OldID NewID 
1  2 
1  3 
3  4 
5  4 
2  6 
2  7 

、レコード1は、2および3レコード4となっているが3であり、そして一緒に合併されました。レコード2は、3に関連している2、6、および1

NEWID 4を記録するために関連している1の一部であったと我々は、レコードNEWID = 7を見れば今では6,7

に分かれています、5,1、および2。

最後に、このように関連したすべてのレコードをNewID = Xに選択する構文が必要です。これは可能ですか?これは再帰のようなものですか?

+2

再帰的なcte。文字通りこの種の事例の数千、数千の例があります。 –

答えて

0

あなたはこのようなものを探していますか?

declare @x int = 4 
;with cte as (
select oldid, newid from table4 where newid = @x 

union all 

select t.oldid, t.newid from cte c inner join table4 t on c.OldId = t.newid 
) select * from cte 
+0

はい、私は何をする必要がありますか、ありがとうKannan。私はcteを避けることを望んでいましたが、私はそれで作業することができます。 – firsttube

関連する問題