このようなクエリをたくさん行う場合は、質問している隣接リストよりも入れ子集合モデルの方が適切であることがわかる場合があります。両方のモデルについて、ここ で良い議論があります。 。
いずれにせよ、隣接リストを使用して要求していることを実行するには、アプリケーションレイヤーで再帰を確認するか、レベルを3番目の列として保存します。
ETA:レベル数がそれほど多くない場合は、自己結合でそれを行うことができます:
例えば2つの祖先を持つノード:
SELECT t1.node
FROM mytable AS t1
JOIN mytable AS t2 ON t1.parent = t2.node
JOIN mytable AS t3 ON t2.parent = t3.node
WHERE t3.parent IS NULL;