mysql - 如何在 Slick 中使用 IN 子句?

标签 mysql sql database scala slick

我有一个使用 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/

相关文章:

MySQL-获取最近的日期并显示表中的每一行

c++ - 关于我的数据存储问题的意见(数据库/自制解决方案)

MySQL 连接和计数查询

Mysql:如何在查询中使用CASE

mysql - stimulsoft 上的两个不同查询是否填充了变量

sql - 加入动态列名称

c# - 一次访问数据库就可以在 LINQ 中更新?

iphone - iOS应用场景信用卡信息加密

php - 在 MySQL 数据库中存储日期和时间以便以后用 PHP 显示的最佳方法是什么?

java转mysql jdbc连接问题