我想要做的是使用此功能从表中删除N个最旧的ID:
def deleteOldRows(size: Int)(implicit s: Session): Int =
MyTable.sortBy(_.id.asc).take(size).delete
此操作会抛出SlickException
,因为
对DELETE语句的查询必须解析为具有单个表的理解 - 不支持的形状:理解(fetch = None,offset = None)
正如文件中所述:
删除查询只能从单个表中进行选择。忽略任何投影(它总是删除完整的行)。
什么是触发多表?是因为sortBy
子句创建了一个临时表来存储结果吗?目前我将查询重写为:
MyTable.sortBy(_.id.asc).take(size).list().map(result => MyTable.filter(_.id === result.id).delete)
哪个基本上采用id并且对于每个过滤和删除,是否有更可读和直接的方法一次删除多行?
答案 0 :(得分:2)
试试MyTable.filter(_.id in MyTable.sortBy(_.id.asc).take(size).map(_.id)).delete
。现在没有查看详细信息,我假设错误消息具有误导性,并且ORDER BY和LIMIT的原因不支持DELETE。