我是 Scala 的新手,我正在使用 Slick 3.1 并有以下查询:
val dBIOAction = for {
user <- users.filter(_.email === email)
company <- companies.filter(_.userid === user.id)
} yield (user, company)
Run Code Online (Sandbox Code Playgroud)
并非所有用户都会在公司中拥有条目。尽管如此,即使公司中没有相应的条目,我也想返回用户。目前,如果没有进入公司,我会得到空结果。
查询大致翻译为:
res46: String = select x2."LASTNAME", x3."NAME", x2."FIRSTNAME", x3."WEBSITE", x3."USERID", x2."EMAIL", x2."ID", x3." ID”来自“用户”x2,“公司”x3,其中 (x2."EMAIL" = 'a@a.com') 和 (x3."USERID" = x2."ID")
看起来公司条款总是包含在内 - 可以有条件地包含吗?如果没有,我还能如何达到预期的效果?
只需使用应用连接而不是一元连接(因为您想要一个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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |