1

連絡先間の家族関係を構築し、連絡先間の隠された関係を発見し、SQL Server で再帰を使用して表示したいと考えています。例:私は次を含むこのテーブルを持っています:

User_id_1   User_id_2   relation
1           2           Parent-child
2           3           Brother-brother
3           4           Brother-brother

私のストアド プロシージャは、特定のユーザー ID のすべての関係を検出する必要があります。このspをuser_id=4で呼び出すと、user_id=4のすべての関係が得られ、4が3と2の兄弟であり、1が4の親であることを知る必要があります。どうすればそれができますか?

4

1 に答える 1

1

さらに 2 つのテーブルから始めることができます。1 つはリレーションシップ (現在の列に似ていますrelation) を構成するためのもので、もう 1 つは再帰ルックアップ中にどのリレーションシップを参照するかを構成するためのものです。

Table: Relationship
Id: int
Description: string

Table: RelationshipToRelationship
FromRelationshipId: int
ToRelationshipId: int

データは次のようになります。

関係

Id   Description
==   ===============
1    Brother-Brother
2    Parent-Child

RelationshipToRelationship

FromRelationshipId   ToRelationshipId 
==================   ================
1                    1
1                    2

私がそれを解決した場合、実行可能なクエリで更新します

私が予見する問題:

  • あなたは最も単純なケース (私の兄弟の親が私の親である) を提示しましたが、他のケース (私の兄弟の子供は私の子供ではありません) ではうまくいきません。
  • 関係をラベル付けするための同様の問題 (兄弟の親Parent-Childに私とラベル付けできますが、兄弟の子供にはラベル付けする必要がありますBrother-Brother-Parent-Child)。

すべてがすぐに混乱します。関連付けたい各パーティ間の直接的な関係を維持する方がよいでしょうか (つまり、ユーザー 4 と 2 を兄弟兄弟として、4 と 1 を親子としてリンクする、テーブル内の別の 2 つのレコード)。

于 2012-05-30T09:45:09.570 に答える