我有一个使用 slick 编写的查询,它不是一个普通的 slick 查询。
该查询是一个选择查询,它从名为 Employee 的表中获取记录。结果类型为 Employee
类。
现在有一个字符串列表
val nameFilter= List("Sachin","Naveen"")
这个“nameFilter”是动态的,它可以有任意数量的名字
var result= dbHandle.db.run((query.drop(10).take(10)).result
变量 query
只是对 Employee 表的选择查询,它选择了从 11 到 20 的记录范围。
现在我需要过滤名称在“nameFilter”中提到的记录,然后从 11 到 20 中选择记录。这意味着我需要一个带有“IN”子句的查询。
请注意,这不是普通的 Slick SQL 查询,我必须以上述格式构建查询。
最佳答案
您可以使用 .inSet 方法执行此操作(请参阅 here ):
Slick
Slick queries are composable. Subqueries can be simply composed, where the types work out, just like any other Scala code.
val address_ids = addresses.filter(_.city === "New York City").map(_.id) people.filter(_.id in address_ids).result // <- run as one query
The method .in expects a sub query. For an in-memory Scala collection, the method .inSet can be used instead.
所以这对您的代码意味着:
val nameFilter= List("Sachin","Naveen")
val filteredQuery = query.filter(_.name.inSet(nameFilter))
var result= dbHandle.db.run((filteredQuery.drop(10).take(10)).result
根据该输入的来源,您应该考虑使用 .inSetBind 来转义输入(参见 this SO post )。
关于mysql - 如何在 Slick 中使用 IN 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44205324/