SQL SELECT для поиска циклических ссылок в дереве, организованном по идентификатору отца?

"Забавное" с циклическими ссылками:

Предположим, у меня есть таблица ELEMENTS, которая содержит иерархию элементов, смоделированную идентификатором отца.

Поле идентификатора отца - null для корня.

Все остальные записи имеют ненулевой идентификатор отца с (автоматически упорядоченным) первичным ключом ( ID ) родительского элемента.

Например, используя

SELECT *
FROM Elements
WHERE FATHER_ID not in (SELECT ID FROM Elements)

, я могу найти все элементы с недопустимыми ссылками на отца ( FATHER_ID не является внешним ключом, предположим, что в этом примере).

Но как мне найти элементы, у которых действительно есть действительный ссылка на отца, НО, чья цепочка ссылок на отца не заканчивается в корне? Я думаю, что это может происходить только для циклических ссылок, например, A является отцом B, но B также является отцом A. Такое «поддерево» не связано с корнем и, следовательно, не является частью главного дерева. Я хочу найти такие поддеревья.

Конечно, я ищу запрос, который доставляет те элементы, которые приводят к циклической ссылке, независимо от длины цепочки ссылок.

Возможно ли это в SQL, // project / main / ... и затем я создал новую ветку из main - //project/1.0 / ... и снова я создал ветку из 1.0 - //project/2.0 / ... Теперь, если кто-то хочет ...

Предположим, у меня есть основная ветка - //project/main/...

, а затем я создал новую ветку из main - //project/1.0/...

, а затем я снова создал ветку из 1.0 - //project/2.0/…………………………………………………………………………………………………………………………………………………………………………………………………………….

7
задан Rohit Jain 27 April 2011 в 11:51
поделиться