"Забавное" с циклическими ссылками:
Предположим, у меня есть таблица 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/…………………………………………………………………………………………………………………………………………………………………………………………………………….