Как сделать SQL серверный рекурсивный CTE - PullRequest
0 голосов
/ 26 мая 2020

У меня есть таблица, где каждая запись содержит уникальный идентификатор Numeri c и 2 родительских идентификатора (мать, отец). Я хотел бы найти способ перечислить родителей (2), бабушек и дедушек (4), прабабушек и дедушек (8) и так далее до определенного уровня. Прежде чем я откажусь от чистого SQL и сделаю это в Python, может ли кто-нибудь сказать мне, как это сделать?

1 Ответ

1 голос
/ 26 мая 2020

Вы можете попробовать что-то вроде ниже, где, как только вы передадите дочерний numericId, вы получите соответствующих родителей, а оттуда рекурсивно вы получите более высокие уровни.

Вы можете отфильтровать уровни с помощью фильтра родительского уровня.

DECLARE @childNumericId AS INT
;WITH CTE_Ancestory AS (
    SELECT numericId AS child, ParentId1 as father, parentId2 as mother, 1 as parentlevel 
    FROM tableName
    WHERE numericId = @childNumericId
    UNION ALL
    SELECT t.NumericId AS child, t.ParentId1 as father, t.parentId2 as mother, c.parentlevel + 1 AS parentLevel
    FROM tableName AS t
    INNER JOIN CTE_Ancestory AS c ON t.numericId IN (c.father, c.mother) 
)
SELECT *
from CTE_Ancestory
Where parentlevel < 4 -- number of levels you need
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...