我只有几张表,为了简单起见,就说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))]到目前为止,我在query中提到了这一点,
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点以后搜索列车,您需要有一个结果集,其中列车名称和列车的班级作为列车结果中的一个列表。
发布于 2012-08-27 04:11:40
我不认为你可以直接在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、编译器或类似工具帮助的情况下编写的。考虑一下免费调试培训:-)
https://stackoverflow.com/questions/7466512
复制相似问题