【发布时间】:2015-08-17 23:59:09
【问题描述】:
从 Slick 文档中可以清楚地看到如何在两个表之间建立一个左连接。
val q = for {
(t, v) <- titles joinLeft volumes on (_.uid === _.titleUid)
} yield (t, v)
正如预期的那样,查询 q 将具有以下属性:_1 类型为 Titles 和 _2 类型为 Rep[Option[Volumes]] 以涵盖不存在的卷。
进一步级联是有问题的:
val q = for {
((t, v), c) <- titles
joinLeft volumes on (_.uid === _.titleUid)
joinLeft chapters on (_._2.uid === _.volumeUid)
} yield /* etc. */
这不起作用,因为_._2.uid === _.volumeUid 无效,因为_.uid 不存在。
根据网络上的各种来源,这应该不是问题,但话说回来,来源往往针对不同的光滑版本,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
【问题讨论】:
-
multiple joins with slick 的可能重复项
-
答案是针对 Slick 2
标签: scala playframework-2.0 slick