gpt4 book ai didi

Scala 光滑 : build query conditionally

转载 作者:行者123 更新时间:2023-12-04 12:50:32 24 4
gpt4 key购买 nike

我是 Scala 的新手,我正在使用 Slick 3.1 并有以下查询:

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

并非所有用户都会在公司中有条目。尽管如此,即使公司中没有相应的条目,我也想返回用户。目前,如果没有进入公司,我得到空结果。

查询大致转化为:

res46: String = select x2."LASTNAME", x3."NAME", x2."FIRSTNAME", x3."WEBSITE", x3."USERID", x2."EMAIL", x2."ID", x3."ID"from "Users"x2, "Companies"x3 where (x2."EMAIL"= 'a@a.com') and (x3."USERID"= x2."ID")

看起来总是包含公司条款 - 可以有条件地包含吗?如果没有,我还能如何达到预期的效果?

最佳答案

只需使用 applicative join而不是 monadic 的(因为你想要一个 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)

关于Scala 光滑 : build query conditionally,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39630608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com