如何使用Slick 3.2 +在select子句中编写嵌套查询

时间:2018-07-09 08:46:19

标签: scala slick

有什么方法可以使用光滑的3.2+创建嵌套选择吗? 基本上,我需要在这里How to write nested queries in select clause

中描述所有这些

但是在slick 3.2上,这种方法不起作用。

1 个答案:

答案 0 :(得分:0)

如果您的表Users(id:UUID,电子邮件:String)和Persons(userId:UUID,名称:String,姓:String)比查询表

select email
from Users
where id in (select userId
             from Persons
             where name = 'John'
             and surname = 'Smith')

看起来像:

users
  .filter(
    _.id in persons
              .filter(p => p.name === "John" && p.surname === "Smith")
              .map(_.userId)
  )
  .map(_.email)
  .result

您需要记住的事情:

  • Query的类型不是DBIO(也不是DBIOAction)-如果要编写查询,则需要在对其调用.result之前进行查询
  • 在条件中使用子查询时,请使用in代替inSet

无论使用injoin等,都应遵循相同的原则。