循環参照のある「楽しい」:
父親IDによってモデル化された要素の階層を含むテーブルELEMENTSがあるとします。
ルートの父親IDフィールドはnullです。
他のすべてのレコードには、父親要素の(自動シーケンスされた)主キー(ID
)を持つnull以外の父親IDがあります。
たとえば、
SELECT *
FROM Elements
WHERE FATHER_ID not in (SELECT ID FROM Elements)
無効な父親参照を持つすべての要素を見つけることができます(FATHER_ID
外部キーではありません。この例ではそれを想定します)。
しかし、有効な父親参照を持っているが、父親参照のチェーンがルートで終わっていない要素をどのように見つけることができますか?これは循環参照でのみ発生する可能性があると思います。たとえば、AはBの父ですが、BもAの父です。このような「サブツリー」はルートにリンクされていないため、メインツリーの一部ではありません。そのようなサブツリーを見つけたいです。
もちろん、参照のチェーンがどれほど長くても、循環参照につながる要素を提供するクエリを探しています。
それはSQLで可能ですか、それとも反復的なソリューションが必要ですか?