Как я могу проследить отношения ID / ParentID между строками таблицы? - PullRequest
4 голосов
/ 27 апреля 2010

У меня есть таблица типа records(ID, ParentID), содержащая эти данные:

ID   ParentID  
1    null  
2    1  
3    2   
4    2  
5    3  
6    null  
7    6  

Если вы нарисуете эту таблицу в иерархии как семейство, 1,2,3,4,5 будет связано друг с другом.

Я хочу найти способ передать удостоверение личности (например, 3), чтобы оно давало мне других членов семьи. Я использую C # и SQL, либо подойдет - я хочу найти такой результат:

3 - result 1,2,4,5
2 - result 1,3,4,5
6 - result 7
and so on

Я хочу найти родителей удостоверения личности, которые я передаю, бабушек и дедушек, детей и внуков (как в моем примере).

Ответы [ 3 ]

3 голосов
/ 27 апреля 2010
1 голос
/ 27 апреля 2010

Это должно сделать это.

CREATE TABLE #Test
(
    ID int,
    ParentID int
)

INSERT #Test VALUES (1, null)
INSERT #Test VALUES (2, 1)
INSERT #Test VALUES (3, 2)
INSERT #Test VALUES (4, 2)
INSERT #Test VALUES (5, 3)
INSERT #Test VALUES (6, null)
INSERT #Test VALUES (7, 6)

DECLARE @QueryId int
SET @QueryId = 2

-- My parents
SELECT [ParentID] FROM #Test WHERE [ID] = @QueryID AND [ParentID] IS NOT NULL
UNION -- My parent's parents
SELECT [ParentID] FROM #Test WHERE [ID] IN (SELECT [ParentID] FROM #Test WHERE [ID] = @QueryID) AND [ParentID] IS NOT NULL
UNION -- My parent's children (i.e. my siblings), excluding me
SELECT [ID] FROM #Test WHERE [ParentID] IN (SELECT [ParentID] FROM #Test WHERE [ID] = @QueryID) AND [ID] != @QueryID
UNION -- My chidren
SELECT [ID] FROM #Test WHERE [ParentID] = @QueryId
UNION -- My chidren's children
SELECT [ID] FROM #Test WHERE [ParentID] IN (SELECT [ID] FROM #Test WHERE [ParentID] = @QueryId)

DROP TABLE #Test
0 голосов
/ 27 апреля 2010

Возможно, вы захотите взглянуть на тип Hierarchy , который, по-видимому, подходит вашей проблеме. Хотя это доступно только с SQL Server 2008

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...