親行が複数の子を持つことができる単一のテーブルがあります。
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
*親自体は親を持つことができないため、再帰は必要ありません。