Рекурсивное чтение таблицы со связанным списком
У меня есть стол на котором стоит дерево друзей;
FID-это идентификатор друга, а MId-это тот, кто пригласил этого друга присоединиться.
Я хотел бы запросить таблицу, чтобы получить все вложенные друзья, к которым первоначальный триггер для присоединения был сделан в середине 3 (например)
Например таблица:
FID MID Vflag 1 9 t 2 9 t 3 9 t 4 9 f 5 9 f 6 9 t 7 5 t 8 3 t 9 3 t 10 3 t 11 3 t 12 4 t 15 10 t 16 10 t 17 10 t 18 15 t 19 15 t 20 15 t
Что я уже пробовал:
WITH Ancestors(InvitedBy, Child) AS ( SELECT InvitedBy, FriendID as Child FROM PromotionPlan WHERE FriendID IS NOT NULL UNION ALL SELECT b.InvitedBy, a.FriendID as Child FROM PromotionPlan a, Ancestors b WHERE b.Child = a.InvitedBy ) SELECT a.* FROM PromotionPlan a WHERE InvitedBy IN (SELECT InvitedBy FROM Ancestors WHERE Child=3)
0x01AA
Это должно помочь: Найдите количество узлов-потомков в SQL-запросе[^]
Maciej Los
Примерные данные не соответствуют запросу.
Member 4529316
Я написал названия столбцов коротко, Fid - FriendID, MID - InvitedBy,vFlag(то же самое)
Maciej Los
Ладно, извини.
Maciej Los
Когда я смотрю на ваши данные, я немного смущен... Похоже, ваши данные неверны. Почему?
FriendID=3 был приглашен 9, а FriendID=9 был приглашен 3. Таким образом, это приводит к тому, что cte переходит в бесконечный цикл:
3->9->9->3->3->9..... и так далее...
Member 4529316
ой, хороший улов этого не заметил
Maciej Los
;)