从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
不存在。
根据网络上的各种来源,这不应该是个问题,但是毕竟不同的源针对不同的slick版本,3.0仍然相对较新。有人对此问题有什么线索吗? 澄清一下,想法是使用两个左连接从三个级联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