scalaquery检索值

时间:2011-09-19 04:38:17

标签: scala scalaquery

我有几张桌子,为简单起见我们说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点之后搜索火车,你需要有一个结果集,火车名称和列车所在的班级列在火车的结果中。

1 个答案:

答案 0 :(得分: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,编译器或类似协助的情况下编写的。考虑免费调试培训: - )