質問

cascadeType.persistを使用する1対1の関係があります。これは、削除されていない膨大な量の子供の記録を時間の経過とともに構築し、パフォーマンスに反映されるほど拡張されています。次に、親が参照されていないすべての子レコードを削除するデータベースをクリーンアップするコードを追加したいと思います。現在、400K+レコードについて話しているとき、すべての顧客インストールでコードを実行する必要があります。

最良の解決策は、必要なレコードを削除する名前のクエリ(2つのデータベースをサポートするため)を実行することだと思います。これが問題になる場所です。

私が望む結果は、残念ながらMySQLで実行されない次のSQLステートメントのように定義できます。

DELETE FROM child c1
WHERE c1.pk NOT IN (SELECT DISTINCT p.pk FROM child c2
JOIN parent p ON p.child = c2.pk);
役に立ちましたか?

解決

DELETE FROM child c
WHERE NOT EXISTS (SELECT 1 FROM parent WHERE child = c.pk)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top