Что я хотел сделать, так это удалить N самых старых идентификаторов из моей таблицы, используя эту функцию:
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)
Что в основном берет идентификаторы и для каждого из них фильтрует и удаляет, есть ли более читаемый и прямой способ удалить несколько строк одновременно?