:クエリが含まれている自己参照テーブルで実行される無限ループI 3つのエントリがテーブルの上に、<a href="http://junit.org/junit4/" rel="nofollow">JUnit</a>を使用して実行されたテストを介し<a href="http://www.h2database.com/html/main.html" rel="nofollow">H2 database</a>に次のクエリを実行してい
WITH ancestors(ID, PARENT_ID) AS
(
SELECT ID, PARENT_ID FROM PEOPLE WHERE ID = <person_id>
UNION ALL
SELECT P1.ID, P1.PARENT_ID FROM PEOPLE P1, PEOPLE P2 WHERE P1.ID = P2.PARENT_ID
)
SELECT ID FROM ancestors;
人。それは人のすべての祖先のIDを見つける。
これは何らかの理由で、テストがハングアップすると無限ループになると思われますが、RAM使用率が急上昇(2GB以上)することがわかります。 なぜこれが起こっているのですか?どのように修正できますか?
観察:
- それがうまく実行されるテーブルで指定されていませんPARENT_IDがない場合、これは
- オラクル に罰金実行しますが、存在する場合、それがハングアップし、継続的にRAMの使用量が増加します。
2番目の選択は間違いなくP1を返す必要があります。私はWHEREの代わりにINNER JOINに変更しようとしましたが、違いはありません。 –
私は私の質問で間違いを犯しました。 2番目のクエリはCTEテーブル "先祖"と結合し、P2値を返す必要があります。それ以外の場合は、同じルートノードを使用します。 – dfdsfdsfsdf
これも試しましたが、の値(祖先はありません)だけが返されます。 –