首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scalaquery检索值

scalaquery检索值
EN

Stack Overflow用户
提问于 2011-09-19 12:38:17
回答 1查看 185关注 0票数 1

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

代码语言:javascript
复制
...
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‘结果中的一个列表。我的结果应该是:

代码语言:javascript
复制
List[(a,List(b))]

到目前为止,我在query中提到了这一点,

代码语言:javascript
复制
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点以后搜索列车,您需要有一个结果集,其中列车名称和列车的班级作为列车结果中的一个列表。

EN

回答 1

Stack Overflow用户

发布于 2012-08-27 04:11:40

我不认为你可以直接在ScalaQuery中做到这一点。我要做的是做一个普通的连接,然后相应地操作结果:

代码语言:javascript
复制
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、编译器或类似工具帮助的情况下编写的。考虑一下免费调试培训:-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7466512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档