11

我面临一个我想简化的问题:(可以肯定,事实上我做错了)。

通缉

我想计算 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))

对于这样的查询,似乎开销很大。

4

1 回答 1

9

不确定这是否已从 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
于 2012-10-12T16:01:07.140 回答