21

たとえば、次のクエリを作成します。

SELECT c.* FROM Coffees c WHERE c.name IN ('robusta', 'arabica')

私の試みは失敗しました:

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]]

プレーンSQLクエリinで句を何らかの形で使用することは可能ですか?Slick

4

4 に答える 4

32

タイプ セーフな「持ち上げられた埋め込み」API もこれをサポートします。

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

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

于 2013-07-02T10:11:42.343 に答える
4

SQL インジェクションに対しては安全ではありませんが、#$インターポレーターを使用できます。

val ids = idList.mkString("'", "','", "'")
val q = sql"""select name from mytable where id in (#$ids)"""
于 2016-09-13T06:21:40.707 に答える
2

これを処理するためのすぐに使用できるものはありません。あなたの最善の策は、おそらく次のようなものです:

val cnames = List("robusta", "arabica").mkString("'", "','", "'")
val query = sql""" SELECT c.* FROM Coffees c WHERE c.name IN (${cnames}) """
于 2013-07-01T16:30:43.943 に答える