复杂光滑连接查询

时间:2014-12-09 23:06:28

标签: scala slick slick-2.0

我有多个表,我需要将它们全部与Slick查询一起返回。

case class A(id: Int, name: String)
case class B(id: Int, name: String)
case class C(id: Int, name: String)
case class AtoC(aId: Int, dId: Int)
case class D(id: Int, name: String)

假设我有与上述案例类匹配的表定义,我想返回类似(A, B, C, Seq[D])的内容,但我找不到一种方法来编写它甚至可以编译的地方。

我尝试过这样的事情:

for {
    a <- AQuery.innerJoin(B)....
    ...
    AtoC <~ a.innerJoin(AtoCQuery).on(....)

但这甚至不会编译。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

val q = for (
  ((((A, B), AtoC), C), D)
  <- AQuery.innerJoin(BQuery).on(_.id === _.id)   // A.id == B.id
    .innerJoin(AtoCQuery).on(_._1.id === _.aId)   // A.id == AtoC.aId
    .innerJoin(CQuery).on(_._2.cId === _.id)      // AtoC.cId == C.aId
    .innerJoin(DQuery).on(_._1._1._1.id === _.id) // A.id == D.id
) yield (A, B, C, D)
val result = q.run

此代码未经过测试。 希望它有所帮助!

此致