SQL 構文エラー: 暗黙的結合と明示的結合の結合
単一の SQL クエリ内で暗黙的結合と明示的結合の両方を使用すると、構文エラーが発生することがよくあります。 次の例は、この問題を示しています:
<code class="language-sql">SELECT e1.name, e2.name, e1Manager.name FROM Employee e1, Employee e2 INNER JOIN Employee e1Manager ON e1.managerEmployeeID = e1Manager.employeeID</code>
このクエリは演算子の優先順位により失敗します。 JOIN
キーワードはカンマよりも優先されます。つまり、データベースは JOIN
句を完全に理解する前に FROM
を処理しようとします。その結果、e1
は定義される前に ON
条件で参照され、エラーが発生します。
優先順位の問題を理解する
SQL 標準では、JOIN
句内のカンマ区切りのテーブル リストよりも FROM
操作の優先順位が高いと規定されています。 クエリ パーサーは最初に JOIN
を解釈し、その定義の前に e1
句内の ON
に遭遇し、構文エラーが発生します。
Hibernate での JOIN の制御 (明示的な JOIN)
Hibernate が明示的な JOIN を排他的に使用するように強制するかどうかは、Hibernate のバージョンによって異なります。古いバージョンでは、明示的な JOIN が完全にはサポートされていない可能性があります。 ただし、新しいバージョンではこの機能が提供される可能性があります。
現在、Hibernate.org から jboss.org へのリダイレクトのため、包括的な Hibernate Query Language (HQL) ドキュメントは利用できません。 この問題が解決されたら、更新された HQL ドキュメントを参照して、特定の Hibernate バージョンでの明示的な JOIN サポートを確認してください。
以上がSQL で暗黙的な JOIN と明示的な JOIN を混在させると無効な構文になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。