是否可以在普通的sql Slick中使用IN子句?

Rog*_*ach 17 scala scala-2.10 slick

例如,我想创建以下查询:

SELECT c.* FROM Coffees c WHERE c.name IN ('robusta', 'arabica')
Run Code Online (Sandbox Code Playgroud)

我的尝试失败了:

val cnames = List("robusta", "arabica")
sql""" SELECT c.* FROM Coffees c WHERE c.name IN ${cnames} """
  could not find implicit value for parameter pconv: 
  scala.slick.jdbc.SetParameter[List[String]]
Run Code Online (Sandbox Code Playgroud)

有可能以某种方式inSlick普通的SQL查询中使用子句吗?

cvo*_*ogt 32

类型安全的"提升嵌入"API也支持这一点:

val ids = List(1,2,3)
val q = for {
  f <- Foo if f.id inSet ids // ids is not bound
}
Run Code Online (Sandbox Code Playgroud)

slick.typesafe.com/doc/1.0.1/api/index.html#scala.slick.lifted.ColumnExtensionMethods

  • 这是如何应用于纯SQL Slick的(如问题所述)?我正在寻找答案,这不适用. (16认同)
  • 它不适用.如果你使用`ids`,你会得到`找不到参数e的隐含值:slick.jdbc.SetParameter [List [String]]`.Downvoting因为虽然它适用于其他情况,但它没有回答这个问题.相关问题:https://github.com/slick/slick/issues/1335 (5认同)
  • 谢谢!我也可以在Slick 3.0中使用它:query.filter(_.id inSet ids) (3认同)