私が正しく理解している場合は、リンクの両方の方法に従うことができますので、あなたは、この使用して再帰共通テーブル式のようにそれを行うことができます。
CREATE TABLE #t (C1 varchar(2), C2 varchar(2));
INSERT INTO #t values('Ab','Bc');
INSERT INTO #t values('Bc','Cd');
INSERT INTO #t values('Cd','De');
INSERT INTO #t values('De','Ef');
INSERT INTO #t values('Gh','Hi');
INSERT INTO #t values('Hi','Ij');
DECLARE @start varchar(2) = 'Cd';
WITH cte(vC1, vC2) AS
(
SELECT C1, C2 FROM #t WHERE C1 = @start
UNION ALL
SELECT C1, C2 FROM #t INNER JOIN cte ON vC2 = C1
),
cte2(vC1, vC2) AS
(
SELECT C1, C2 FROM #t WHERE C2 = @start
UNION ALL
SELECT C1, C2 FROM #t INNER JOIN cte2 ON vC1 = C2
)
SELECT vC1 FROM cte
UNION -- unions here add an implicit DISTINCT
SELECT vC2 FROM cte
UNION
SELECT vC1 FROM cte2
UNION
SELECT vC2 FROM cte2
[ツリー構造内のすべてのメンバーを検索]の可能複製(HTTP ://stackoverflow.com/questions/40631222/find-all-members-in-a-tree-structure) –
これを明確にするには:C2が次のC1に、またはその逆にC1のパスが存在する以前のC2に接続します。パス内の1つのノードを渡して、このパスのすべてのメンバーを取得したい(重要ではない)複数のパスが存在する可能性がある(複数の前/次ノード)? – Shnugo
@ Shnugoはい、パス – MattLance