1

我有几张桌子,为了简单起见,我们说 2 张。我可以用这种方式创建它们,

...
val tableA = new Table[(Int,Int)]("tableA"){
def a = column[Int]("a")
def b = column[Int]("b")
}

val tableB = new Table[(Int,Int)]("tableB"){
def a = column[Int]("a")
def b = column[Int]("b")
}

我将进行查询以从 tableA 中检索值“a”和从 tableB 中检索值“a”作为“a”结果中的列表,我的结果应该是:

List[(a,List(b))]

到目前为止,我在查询中达到了这一点,

def createSecondItr(b1:NamedColumn[Int]) = for(
    b2 <- tableB if b1 === b1.b
    ) yield b2.a

val q1 = for (
a1 <- tableA
listB = createSecondItr(a1.b)
) yield (a1.a , listB)

我没有测试代码,所以代码中可能有错误。我的问题是我无法从结果中检索数据。

要了解问题,请乘坐火车和课程。您在下午 12 点之后搜索火车,您需要有一个结果集,其中火车名称和火车在火车结果中作为列表列出。

4

1 回答 1

1

我认为您不能直接在 ScalaQuery 中执行此操作。我要做的是做一个正常的连接,然后相应地操纵结果:

import scala.collection.mutable.{HashMap, Set, MultiMap}

def list2multimap[A, B](list: List[(A, B)]) = 
  list.foldLeft(new HashMap[A, Set[B]] with MultiMap[A, B]){(acc, pair) => acc.addBinding(pair._1, pair._2)}

val q = for (
     a <- tableA
     b <- tableB
     if (a.b === b.b)
) yield (a.a, b.a)

list2multimap(q.list)

list2multimap 取自https://stackoverflow.com/a/7210191/66686

代码是在没有 IDE、编译器或类似工具的帮助下编写的。考虑调试免费培训:-)

于 2012-08-26T20:11:40.270 回答