Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 光滑3多个外部连接_Scala_Playframework 2.0_Slick - Fatal编程技术网

Scala 光滑3多个外部连接

Scala 光滑3多个外部连接,scala,playframework-2.0,slick,Scala,Playframework 2.0,Slick,从流畅的文档中,可以清楚地看到如何在两个表之间进行单个左连接 val q = for { (t, v) <- titles joinLeft volumes on (_.uid === _.titleUid) } yield (t, v) 如果\uu.uid不存在,则这将不起作用,因为\uu.uid===\uu.volumeUid无效 根据网络上的各种消息来源,这不应该是一个问题,但话说回来,消息来源倾向于针对不同的光滑版本,3.0仍然是相当新的。有人对这个问题有什么线索吗? 为了澄

从流畅的文档中,可以清楚地看到如何在两个表之间进行单个左连接

val q = for {
  (t, v) <- titles joinLeft volumes on (_.uid === _.titleUid)
} yield (t, v)
如果
\uu.uid
不存在,则这将不起作用,因为
\uu.uid===\uu.volumeUid
无效

根据网络上的各种消息来源,这不应该是一个问题,但话说回来,消息来源倾向于针对不同的光滑版本,3.0仍然是相当新的。有人对这个问题有什么线索吗? 为了澄清这一点,我们的想法是使用两个左连接从3个级联的1:n:n表中提取数据。 等效的SQL是:

Select *
from titles
left join volumes
    on titles.uid = volumes.title_uid
left join chapters
    on volumes.uid = chapters.volume_uid

您的第二个左联接不再在
TableQuery[Titles]
上运行,而是在有效的
查询[(Titles,Option[Volumes])]
上运行(忽略结果和集合类型参数)。当您在
表格查询[章节]
上加入结果查询时,您可以使用
\u 2
字段访问元组中的第二个条目(因为它是
选项
您需要
映射
才能访问
uid
字段):


这个答案可能与Slick 2Hi Sean的答案相同-我更正了我的问题代码并添加了2.uid。这实际上是一个问题,因为在表达式:joinLeft chapters on(.\u 2.uid===.\u.volumeUid).\u 2不是卷的类型,而是Rep[Option[Volumes]]的类型。因此u._2.uid不可用,这是问题的根源。@Bruno-更新了我认为正确的3.0I语法,并将答案标记为正确,因为它确实可以编译。然而,不幸的是,我无法完全测试它,因为我目前在slick中面临其他问题。谢谢如果将所有的
joinLeft
s放在一行中,它就会编译。至少对我来说。
Select *
from titles
left join volumes
    on titles.uid = volumes.title_uid
left join chapters
    on volumes.uid = chapters.volume_uid
val q = for {
  ((t, v), c) <- titles 
                     joinLeft volumes on (_.uid === _.titleUid)
                     joinLeft chapters on (_._2.map(_.uid) === _.volumeUid)
} yield /* etc. */
// The `Table` variant of the joined row representation
case class TitlesAndVolumesRow(title: Titles, volumes: Volumes)

// The DTO variant of the joined row representation
case class TitleAndVolumeRow(title: Title, volumes: Volume)

implicit object TitleAndVolumeShape
  extends CaseClassShape(TitlesAndVolumesRow.tupled, TitleAndVolumeRow.tupled)