Это не относится к SQL Server.

я есть таблица, которая хранит данные иерархии в родительском дочернем формате с одним верхним узлом. Несколько уровней, и каждый родитель имеет несколько детей. Как я могу написать рекурсивный запрос, чтобы выбрать только родительские дочерние строки от определенного узла до последнего дочернего?

Пример таблицы

Parent|child 
1     |2 
1     |3 
2     |4 
2     |5 
3     |6 
3     |7 
6     |8

Как я могу получить только строки из узла 3 и всех его потомков?

 a_horse_with_no_name29 нояб. 2017 г., 22:06
КоторыйСУБД продукт вы используете? Postgres? Oracle? «SQL» - это просто язык запросов, а не название конкретного продукта базы данных.
 Salomon Zhang29 нояб. 2017 г., 21:50
Пожалуйста, укажите проблему, которую вы имеете.

Ответы на вопрос(1)

вы можете сделать это с помощью выражений общих таблиц (CTE) с помощью рекурсии. Я считаю, что это работает на всех версиях 2008R2 и выше. Приведенный ниже запрос даст вам все отношения Родитель - Дочерний, которые являются потомками 3.

CREATE TABLE dbo.ParentChildRel
(
    Parent INT
   ,Child INT
)

INSERT INTO dbo.ParentChildRel
VALUES (1,2)
      ,(1,3)
      ,(2,4)
      ,(2,5)
      ,(3,6)
      ,(3,7)
      ,(6,8)
      ,(7,10)

;WITH Hierarchy AS
    (
        SELECT Parent   
              ,Child
        FROM dbo.ParentChildRel
        WHERE Parent = 3
        UNION ALL
        SELECT rel.Parent
              ,rel.Child
        FROM Hierarchy hier
             INNER JOIN dbo.ParentChildRel rel ON hier.Child = rel.Parent
    )
SELECT *
FROM Hierarchy

Результаты

Parent  Child
3       6
3       7
7       10
6       8
 a_horse_with_no_name29 нояб. 2017 г., 22:07
Это не относится к SQL Server.

Ваш ответ на вопрос