Slick 3加入查询

时间:2015-11-04 11:38:13

标签: scala slick

我应该从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个小查询吗?

谢谢!

1 个答案:

答案 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]。致电.resultDBIO[Seq[Xs]]。由于您处于for理解模块中且所有理解都有DBIO类型,因此您的rN结果实际上为Seq[X],因此您可以将它们传递给inSet方法。< / p>

查看monadic joins上的文档。

您可能还想考虑使用inSetBind