2

親行が複数の子を持つことができる単一のテーブルがあります。

ID    ParentID    Name
1     NULL        'I am the parent'
2     1           'I am a child'
3     1           'I am another child'
4     NULL        'I am a loner'

その「ファミリー」内の任意の ID から「ファミリー」内のすべての行を返す最も簡単で効率的な方法を探しています。1、2、または 3 を指定すると最初の 3 行が返され、4 を指定すると最後の行のみが返されます*。

これは非常に頻繁に呼び出されるため、合理的であれば (またはある種のストアド プロシージャ)、これを単一の SQL 呼び出しにしたいと考えています。

私の最善の試みは、複数の呼び出しにつながりました:

SELECT ParentID FROM Person WHERE ID = @id

/*if (parentid == null)*/
    SELECT * FROM Person WHERE ID = @id OR ParentID = @id
/*else*/
    SELECT * FROM Person WHERE ID = @parentid OR ParentID = @parentid

*親自体は親を持つことができないため、再帰は必要ありません。

4

1 に答える 1

4

OR家族を見つけるには、次の sが必要です。

SELECT * FROM Person WHERE ID = @id 
OR ParentID = @id 
OR ID = (SELECT ParentID FROM Person p2
         WHERE ID = @id)
OR ParentID = (SELECT ParentID FROM Person p2
         WHERE ID = @id)

Demo

于 2013-11-14T15:58:42.077 に答える