Reputation: 81
I should select data from 3 tables result from each query I will use with inSet operation
val q1 = tQ.filter(...).groupBy(_.s).map(_._1)
val r1 = Await.result(db.run(q1.result), Duration.Inf)
val q2 = tQ.filter(...inSet(r1)).groupBy(_.s).map(_._1)
val r2 = Await.result(db.run(q2.result), Duration.Inf)
val q3 = tQ.filter(...inSet(r2)).groupBy(_.s).map(_._1)
val r3 = Await.result(db.run(q3.result), Duration.Inf)
Can I join 2 small queries to the ONE ?
Thanks!
Upvotes: 1
Views: 886
Reputation: 1663
Slick queries are highly composable. Something like this should do:
val q = for {
r1 <- tQ.filter(...).groupBy(_.s).map(_._1).result
r2 <- tQ.filter(...inSet(r1)).groupBy(_.s).map(_._1).result
r3 <- tQ.filter(...inSet(r2)).groupBy(_.s).map(_._1).result
} yield r3
Await.result(db.run(q), Duration.Inf)
If X
is some type you want to pass to inSet
, then your .filter(...).groupBy(...).map(_._1)
type is Query[Xs, X, Seq]
. Calling .result
gives DBIO[Seq[Xs]]
. Since you are in for
comprehension block and all comprehensions have DBIO
type, your rN
results actually are Seq[X]
so you can pass them to inSet
method.
Check out documentation on monadic joins.
You might also want to consider using inSetBind.
Upvotes: 3