3

次のデータベース テーブル構造があるとします。

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に翻訳してみます)。

4

1 に答える 1