2015-05-21 97 views
1

我試圖做兩個表上的複雜查詢。它們看起來象下面這樣:油滑3.0.0綜合查詢

表1:

id: 
    name: 
    table2Id: 
    version: 

表2:

id: 
    comments: 

假設我有一個代表這些表的相應油滑類,我試圖讓所有的元素表1和表2滿足以下條件:

Table1.table2Id === Table2.id and max(Table1.version) 

我嘗試了以下方法:

val groupById = (for { 
    elem1 <- table1Elems 
    elem2 <- table2Elems if elem1.id === elem2.id 
} yield (elem1, elem2)).groupBy(_._1.id) 

我知道我必須映射groupById並查找最大版本,但我沒有得到正確的語法!任何幫助?

我需要的是有效的下面的SQL查詢的油滑相當於:

SELECT * 
FROM t t1 
WHERE t1.rev = (SELECT MAX(rev) FROM t t2 WHERE t2.id = t1.id) 

回答

1

爲了模擬:

SELECT * from t t1 WHERE t1.rev = (SELECT max(rev) FROM t t2 WHERE t2.id = t1.id) 

嘗試下面的任一:基於

val q1 = for{ 
    t < table1 if t.rev === (
    table2.filter(_.id === t.id).map(_.rev).max 
) 
} yield t 

val q2 = table1.filter{t=> t.rev === (
    table2.filter(_.id === t.id).map(_.rev).max 
)}.map(identity) 

編輯在評論:

val q = (for{ 
    t1 < table1; t2 <- table2 if t1.id === t2.id 
} yield t1).orderBy(_.version.max).reverse.take(1) 
+0

表2中沒有修訂字段,所以地圖(_。rev)不起作用?可能是我的問題可能是錯的。對不起!如果您注意到表結構,版本存在於表1中而不是表2中。所以我想要的是,Table1中的最大版本是針對表2中匹配的給定ID的最大版本。 – sparkr

+0

我修改了我的其他帖子,這對我正在嘗試做的操作稍有不同要求。 http://stackoverflow.com/questions/30407289/slick-2-1-0-filter-max-version-in-a-table你可以看看並建議嗎? – sparkr

+0

您的兩個查詢都不起作用。你有更好的主意嗎?建議? – sparkr