"Fun" con referencias cíclicos:SQL SELECT para buscar referencias cíclicas en el árbol padre-ID-organizado?
Supongamos que tiene un elementos de la tabla que contienen una jerarquía de elementos, modelado por un ID padre.
El campo ID de padre es nulo para la raíz.
Todos los demás registros tienen un Id. De padre no nulo con la clave principal (autosecuenciada) (ID
) del elemento padre.
Por ejemplo, el uso de
SELECT *
FROM Elements
WHERE FATHER_ID not in (SELECT ID FROM Elements)
puedo encontrar todos los elementos que tienen referencias padre inválido (FATHER_ID
no es una clave externa, vamos a suponer que en este ejemplo).
Pero, ¿cómo puedo encontrar elementos que tengan una referencia padre válida PERO cuya cadena de referencias padre no termina en la raíz? Creo que esto solo puede ocurrir para referencias cíclicas, por ejemplo, A es el padre de B, pero B también es el padre de A. Tal "subárbol" no está vinculado a la raíz y, por lo tanto, no es parte del árbol principal. Quiero encontrar esos subárboles.
Por supuesto, estoy buscando una consulta que proporcione los elementos que conducen a una referencia cíclica sin importar cuánto tiempo la cadena de referencias pueda ser.
¿Es eso posible en SQL, o necesito una solución iterativa?
+1 para el uso de CONNECT BY. Hay todo tipo de cosas geniales que puede hacer con datos jerárquicos. Tenga en cuenta que es solo Oracle. En 11gR2 agregaron la cláusula recursiva de factorización de subconsulta (http://technology.amis.nl/blog/6104/oracle-rdbms-11gr2-goodbye-connect-by-or-the-end-of-hierarchical-querying-as- lo sabemos) –
Oha. Eso parece algo para batirse y valer la pena. Gracias. – TheBlastOne