以更好的方式编写Slick查询

时间:2016-08-30 00:39:25

标签: scala slick

我有一个看起来像

的table1
Table1(id: Long, name: String, parentId: Long) // self referenceing
Table2(table1Id : Long, someOtherId: Long) // FK with Table1 on table1Id

我需要在光滑的

中编写以下SQL查询
select t11.* from Table1 t1 
inner join Table2 t2 on (t1.id = t2.table1Id)
inner join Table1 t11 on (t11.parentId = t1.id)
where t2.someOtherId == 10

为此,我写了以下代码

val query1 = Table2.query.filter(_.someOtherId === 10)
val query2 = Table1.query innerJoin query1 on (_.id === _.table1Id)
val query3 = Table1.query innerJoin query2 on (_.parentId === _._1.id)
query3.list.map(_._1)

基本上Table2是一个查找表,但它只包含父记录的映射。

我们需要在table2上查找查询的所有父记录,然后将父记录扩展为Table1中的子记录。

我的问题是,是否有更好的方法来编写此查询?

1 个答案:

答案 0 :(得分:2)

此刻我正在iPad上,因此简洁。

我使用monadic查询。检查Slick文档,查找查询,然后选择第一个内部或外部联接示例。它类似于你在这里寻找的东西