我遇到一个我想简化的问题:(很确定,实际上我做错了)。

通缉

我想计算一个id = 1的用户数量。在SQL语言中,我们说这是这样的:

SELECT COUNT(*) FROM users WHERE id = 1

代码

我以“提升”形式使用Slick,因此这是我计算用户数的代码:
Query(Users.where( _.id === 1).length).first

实际上,这里发生的是Slick别名ScalaQuery,实际上是在创建带有过滤原因的子查询,然后计算子请求的结果。
SELECT COUNT(*) FROM (SELECT * FROM users WHERE id = 1))

这样的查询似乎有很大的开销。

最佳答案

不知道这是否已从ScalaQuery更改为Slick,但是请尝试:

val q = for{
  id <- Parameters[Int]
  t <- tableObject if t.id is id
} yield t.id.count

val cnt = q(someID).firstOption getOrElse 0

关于scala - 如何使用Slick使用过滤器计算结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12862632/

10-10 18:27
查看更多