ホームページ >データベース >mysql チュートリアル >再帰的 SQL クエリの「再帰の深さの制限を超えました」エラーを解決するにはどうすればよいですか?
再帰クエリの「再帰深さの制限を超えました」エラーの解決
この記事では、最大再帰深度の超過という一般的な SQL クエリ エラーについて説明します。 この問題は再帰的な Common Table Expression (CTE) に起因しており、特にクエリ例の EmployeeTree
CTE に影響を与えます。
EmployeeTree
CTE は、tEmployees
テーブルから従業員データを再帰的に取得し、APV_MGR_EMP_ID
列と UPS_ACP_EMP_NR
列の一致する値に基づいて階層構造を構築します。 ただし、非常に深い階層では再帰制限 (多くの場合 100 に設定) がトリガーされ、エラーが発生する可能性があります。
解決策: 無制限の再帰を可能にする
解決策は、クエリの maxrecursion
オプションを調整することです。このオプションは、再帰の最大深さを制御します。 0 に設定すると、無制限の再帰が可能になり、エラーを効果的に回避できます:
<code class="language-sql">... from EmployeeTree option (maxrecursion 0)</code>
option (maxrecursion 0)
を追加すると、再帰 CTE は一致する行がすべて取得されるまで処理を継続し、「再帰の深さの制限を超えました」エラーを防ぎます。 このアプローチは、データ構造により最終的に再帰が自然に終了すると確信している場合に適しています。 ただし、注意が必要です。 不適切に設計されたクエリで無制限の再帰が行われると、パフォーマンスの問題が発生したり、システムが不安定になったりする可能性があります。 無限再帰を伴う変更を徹底的にテストします。
以上が再帰的 SQL クエリの「再帰の深さの制限を超えました」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。