У меня есть модель данных для определения многопользовательских иерархических данных. Каждая запись будет представлять отношения двух узлов, в которых один будет родительским, а другой - дочерним. В моем случае узел может иметь несколько родителей. Мне нужно найти все возможные отношения между двумя узлами.
Например, возьмите приведенную ниже таблицу.
---------------------------------
| id | parent_node | child_node |
---------------------------------
| 1 | NULL | A |
| 2 | NULL | B |
| 3 | A | C |
| 4 | A | D |
| 5 | B | D |
| 6 | B | E |
| 7 | C | G |
| 8 | C | H |
| 10 | D | I |
| 11 | E | I |
| 12 | E | J |
---------------------------------
Это сформирует график как показано ниже
A B
/ \ / \
C D E
/ \ \ / \
G H I J
В приведенной выше модели A и B будут узлами верхнего уровня, и у каждого есть два дочерних элемента. Узел D назначен дочерним узлом узлов A и B. А также узел I назначен дочерним узлом узла D и узла E. Все остальные узлы имеют ровно одного родителя.
Мне нужно написать запрос, чтобы показать все возможные отношения узла с другим узлом .
Например,
- A и C имеют отношения, потому что C является потомком Узла A.
- A и D имеют отношения, потому что D является дочерним по отношению к Узлу A.
- A и G имеют отношение, потому что G является внуком Узла A.
- Это пойдет на любое количество уровней.
- Два узла не имеют никакой связи, если какой-либо один узел не является дочерним или внуком n-го уровня другого.
Если два узла не имеют каких-либо отношений, они не будут отображаться.
Окончательный результат для приведенного выше графика будет таким, как показано ниже,
----------------------------
| parent_node | child_node |
----------------------------
| A | C |
| A | D |
| C | G |
| C | H |
| D | I |
| A | G |
| A | H |
| A | I |
| B | D |
| B | E |
| B | I |
| E | I |
| E | J |
| B | J |
----------------------------
Я новичок в SQL Server. Пожалуйста, помогите мне решить этот вопрос.