【发布时间】:2020-01-25 19:14:26
【问题描述】:
我总结了两个不同数据库表中的总数:
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 中执行此操作的任何想法?
【问题讨论】:
-
可能的解决方案是将其包装在返回一行的查询中: tableQuery3.filter(_.id === 1).map { _ => sum1 + sum2 }.result.headOption 但会喜欢找到更好看的东西。