gpt4 book ai didi

scala - 具有多个表的光滑外连接

转载 作者:行者123 更新时间:2023-12-03 22:36:44 24 4
gpt4 key购买 nike

在两个表之间进行外连接很容易:

tblA.leftJoin(tblB).on(_.aId === _.bId)

但是当在 5 个表之间进行连接时,它很快变得笨拙:
tblA.leftJoin(tblB).on(_.aId === _.bId).
leftJoin(tblC).on(_._1.aId === _.cId).
leftJoin(tblD).on(_._1._1.aId === _.dId).
leftJoin(tblE).on(_._1._1._1.aId === _.eId)

元组访问器变得有点困惑,尤其是当它们没有全部访问第一个表时。

有没有更好的办法?

内连接在语义上等同于带过滤器的 flatMap 这一事实解决了内连接的这个问题:
for {
a <- tblA
b <- tblB if a.aId === b.bId
c <- tblC if a.aId === c.cId
d <- tblD if a.aId === d.dId
e <- tblE if a.aId === e.eId
} yield ???

外连接是否有类似优雅的语法?

最佳答案

这个怎么样?

tblA.leftJoin(tblB).leftJoin(tblC).leftJoin(tblD).leftJoin(tblE).on{
case ((((a,b),c),d),e) =>
a.aId === b.bId &&
a.aId === c.cId &&
a.aId === d.dId &&
a.aId === e.eId
}

目前不会产生最好的 SQL,但我们希望尽快改进。

产生 HLists 的左连接应该允许甚至使模式匹配更好,但可能被阻止: https://github.com/slick/slick/issues/728

关于scala - 具有多个表的光滑外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22193944/

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