2011-09-19 43 views
1

我有幾張表,爲簡單起見我們說2。我可以通過這種方式創建它們,scalaquery檢索值

... 
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") 
} 

我要去有一個查詢檢索值「a」從表A和值「a」從tableB的從結果「一」 我的結果裏面必須有一個列表是:

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

我不認爲你可以直接在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,編譯器或類似的援助書面作出。考慮免費的調試培訓:-)