次のデータベース テーブル構造があるとします。
A >- B -< C >- D
ここで、>- は多対 1 の関係であり、-< は 1 対多です。
ここで、指定された名前の D に対応するすべての A エントリを削除したいと思います。
そう言う人もいるかもしれません
DELETE FROM A JOIN B ON <condition> JOIN C ON <condition> JOIN D ON <condition> WHERE D.name=?
解決策になります。残念ながら、クエリにJOIN
句を含めることはできないようです。DELETE
別のアプローチは、次のようなサブクエリを使用することでした。
DELETE FROM A AS elem WHERE elem.id IN ( SELECT id FROM A JOIN B ON <condition> JOIN C ON <condition> JOIN D ON <condition> WHERE D.name=?);
これは Oracle では機能する可能性がありますが、MySQL ではこれを実行できません (削除しようとしているテーブルで選択を行うことができません)。
では、どうすればこれを達成できますか?
より正確には、Hibernate を使用しており、このクエリを作成するのは HQL です。したがって、JPA/Hibernate ソリューションが推奨されます。
もちろん、単純なSQLでも構いません(HQLに翻訳してみます)。