我有几张桌子,为简单起见我们说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点之后搜索火车,你需要有一个结果集,火车名称和列车所在的班级列在火车的结果中。
答案 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,编译器或类似协助的情况下编写的。考虑免费调试培训: - )