私がやりたかったのは、この関数を使用してテーブルから N 個の最も古い ID を削除することです。
def deleteOldRows(size: Int)(implicit s: Session): Int =
MyTable.sortBy(_.id.asc).take(size).delete
SlickException
この操作は、理由をスローします
DELETE ステートメントのクエリは、単一のテーブルを含む理解に解決する必要があります -- サポートされていない形状: 理解 (フェッチ = なし、オフセット = なし)
ドキュメントにも記載されているように:
削除するためのクエリは、単一のテーブルからのみ選択する必要があります。プロジェクションは無視されます (常に行全体が削除されます)。
複数のテーブルをトリガーしているのは何ですか? sortBy
句が結果を格納する一時テーブルを作成するためですか? とりあえず、クエリを次のように書き直しました。
MyTable.sortBy(_.id.asc).take(size).list().map(result => MyTable.filter(_.id === result.id).delete)
基本的にIDを取得し、1つのフィルターと削除ごとに、複数の行を一度に削除するためのより読みやすく直接的な方法はありますか?