Каждый вызов .result
создает действие DBIO
, которое является оператором SQL. Хитрость в сокращении количества действий состоит в том, чтобы найти способ объединить два запроса (или два Rep
с) в одно действие.
В вашем случае вы можете сжать два запроса:
val sum1 = table1.map(_.amount).sum.ifNull(0)
val sum2 = table2.map(_.amount).sum.ifNull(0)
val query = sum1.zip(sum2)
При запуске query.result
вы выполните один запрос, например:
select ifnull(x2.x3,0), ifnull(x4.x5,0)
from
(select sum("amount") as x3 from "table_1") x2,
(select sum("amount") as x5 from "table_2") x4
..., что приведет к кортежу двух значений.
Тем не менее, поскольку у вас уже есть Rep[Int]
, вы можете использовать +
в базе данных:
val query = sum1 + sum2
..., который будет выглядеть следующим образом:
select ifnull(x2.x3,0) + ifnull(x4.x5,0)
from
(select sum("amount") as x3 from "table_1") x2,
(select sum("amount") as x5 from "table_2") x4