Ram*_*hna 6 mysql sql database scala slick
我有一个使用光滑的查询,它不是一个简单的光滑查询.该查询是一个select查询,它从名为Employee的表中获取记录.结果是类型Employee类.
现在有一个字符串列表
val nameFilter= List("Sachin","Naveen"")
Run Code Online (Sandbox Code Playgroud)
这个"nameFilter"是动态的,它可能有任意数量的名称
var result= dbHandle.db.run((query.drop(10).take(10)).result
Run Code Online (Sandbox Code Playgroud)
该变量query 只是Employee表的select查询,它选择11到20之间的记录范围.
现在我需要过滤"nameFilter"中提到的名称的记录,然后选择11到20之间的记录.这意味着我需要一个带有'IN'子句的查询.
请注意,这不是一个简单的Slick SQL查询,我必须以上述格式构建查询.
thw*_*gan 10
您可以使用方法.inSet(请参阅此处)执行此操作:
华而不实的
光滑的查询是可组合的.子查询可以简单地组合,其中类型可以解决,就像任何其他Scala代码一样.
Run Code Online (Sandbox Code Playgroud)val address_ids = addresses.filter(_.city === "New York City").map(_.id) people.filter(_.id in address_ids).result // <- run as one query方法.in期望子查询.对于内存中的Scala集合,可以使用方法.inSet.
这对您的代码意味着:
val nameFilter= List("Sachin","Naveen")
val filteredQuery = query.filter(_.name.inSet(nameFilter))
var result= dbHandle.db.run((filteredQuery.drop(10).take(10)).result
Run Code Online (Sandbox Code Playgroud)
根据输入的来源,您应该考虑使用.inSetBind来转义输入(请参阅此SO帖子).