0

Добрый день, всем! У меня есть график. Во-первых, я знаю, как построить простой рекурсивный выбор. Я прочитал некоторую информацию по msdn.Возвращение всех детей с помощью рекурсивного выбора

This is my sample graph
На этом изображении вы можете увидеть, что (например) верхний узел графа, который пронумерован 0, влияет на номер узла 1 (и т.д. (2-> 4), (3-> 4), (4-> 5), (5-> 6), (1-> 5))

ЗАДАЧА: для каждый узел показывает узлы, на которые он влияет. Например, номер 1 влияет на 5 и 6.

Результат SQL должен возвращать что-то вроде этого:

who_acts| on_whom_influence 
0  | 1 
0  | 5 
0  | 6 
1  | 5 
1  | 6 
2  | 4 
2  | 5 
2  | 6 
3  | 4 
3  | 5 
3  | 6 
4  | 5 
4  | 6 
5  | 6 

Начиная данные, которые я могу получить с помощью anchor member из КТР являются:

who_acts| on_whom_influence 
2  | 4 
3  | 4 
4  | 5 
5  | 6 
1  | 5 
0  | 1 

Могу ли я сделать этот выбор, используя синтаксис SQL и рекурсивный выбор? Как мне это сделать?

+0

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

+0

Вы должны включить определения таблиц и текущий анкерный запрос. @Joachim результат выборки - это первый кодовый блок. Это список узлов (who_acts) и всех их детей любой глубины (on_whom_influence). –

+0

@JoachimIsaksson, @ EsotericScreenName результат - это первый блок после того, как «в результате SQL должен вернуть что-то вроде этого». Это результат. – NDGO

ответ

2

Это звучит как простой CTE. Вы можете пройти вдоль корня влияния в отдельной колонке:

; with Influence as 
     (
     select who_acts 
     ,  on_whom_influence 
     ,  who_acts as root 
     from dbo.YourTable 
     union all 
     select child.who_acts 
     ,  child.on_whom_influence 
     ,  parent.root 
     from Influence parent 
     join dbo.YourTable child 
     on  parent.on_whom_influence = child.who_acts 
     ) 
select root 
,  on_whom_influence 
from Influence 
order by 
     root 
,  on_whom_influence 

Example on SQL Fiddle.

+0

ok.I прочитаю его правильно. – NDGO

Смежные вопросы