Scala Slick将Rep子查询合并为一个re

问题描述 投票:1回答:1

我总结了两个不同数据库表中的总数:

val sum1Query: Rep[Int] = tableQuery1.map(_.amount).sum.ifNull(0)
val sum2Query: Rep[Int] = tableQuery2.map(_.amount).sum.ifNull(0)

for {
  sum1 <- sum1Query.result
  sum2 <- sum2Query.result
} yield {
  sum1 + sum2
}

每次调用.result时,它将对数据库运行2个SQL查询。我正在寻找一种使其仅使用一个SQL查询的方法。

类似的事情不起作用:

for {
  sum1 <- sum1Query
  sum2 <- sum2Query
} yield {
  sum1 + sum2
}.result

除了使用普通的SQL查询以外,还有其他关于在Slick中执行此操作的想法吗?

scala slick
1个回答
0
投票

每次调用.result都会创建一个DBIO操作,它是一个SQL语句。减少操作数量的技巧是找到一种方法,将两个查询(或两个Rep)组合在一起成为一个操作。

根据您的情况,您可以压缩两个查询:

© www.soinside.com 2019 - 2024. All rights reserved.