Slick 2.0:删除多行

时间:2014-06-29 11:31:36

标签: scala slick-2.0

我想要做的是使用此功能从表中删除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并且对于每个过滤和删除,是否有更可读和直接的方法一次删除多行?

1 个答案:

答案 0 :(得分:2)

试试MyTable.filter(_.id in MyTable.sortBy(_.id.asc).take(size).map(_.id)).delete。现在没有查看详细信息,我假设错误消息具有误导性,并且ORDER BY和LIMIT的原因不支持DELETE。

我创建了一张票:https://github.com/slick/slick/issues/872