2016-09-22 36 views
0

我是新來斯卡拉,我使用油滑3.1和有這個疑問:斯卡拉滑頭:建立查詢條件

val dBIOAction = for { 
    user <- users.filter(_.email === email) 
    company <- companies.filter(_.userid === user.id) 
} yield (user, company) 

並非所有用戶都可以在公司的條目。儘管如此,即使公司沒有相應的條目,我也想要返回用戶。目前,如果公司沒有進入,我會得到空的結果。

查詢大致翻譯爲:

res46:字符串=選擇X2 「LASTNAME」,X3 「NAME」,×2 「FIRSTNAME」 ×3 「網站」,×3 「USERID」,X2。。。。。 (x2。「EMAIL」='[email protected]')和(x3。「USERID」= x2。「ID」,x3。「ID」來自「用戶」x2,「公司」x3 。「ID」)

看起來像公司條款總是包含 - 是否可以包含條件?如果沒有,我還能如何達到預期的效果?

回答

3

只需使用一個applicative join,而不是一元一個(因爲你想有一個LEFT JOIN而非INNER JOIN

val usersWithCompany = users.joinLeft(companies).on(_.id === _.userId) 
val dBIOAction = for { 
    (user, company) <- usersWithCompany.filter(_._1.email === email) 
} yield (user, company) 
+0

無縫地工作! – srvy