我应该从3个表中选择数据 我将与 inSet 操作
一起使用的每个查询的结果 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)
我可以加入2个小查询吗?
谢谢!
答案 0 :(得分:2)
光滑的查询是高度可组合的。这样的事情应该做:
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)
如果X
是您要传递给inSet
的某种类型,那么您的.filter(...).groupBy(...).map(_._1)
类型为Query[Xs, X, Seq]
。致电.result
会DBIO[Seq[Xs]]
。由于您处于for
理解模块中且所有理解都有DBIO
类型,因此您的rN
结果实际上为Seq[X]
,因此您可以将它们传递给inSet
方法。< / p>
查看monadic joins上的文档。
您可能还想考虑使用inSetBind。