2017-05-26 41 views
1

私はslickを使って書かれたクエリを持っていますが、それは普通の滑らかなクエリではありません。 クエリは、Employeeというテーブルからレコードをフェッチする選択クエリです。結果はタイプEmployeeクラスです。SlickのIN節の使い方は?

は今ストリングス

val nameFilter= List("Sachin","Naveen"") 

のリストがあり、この「nameFilterは」動的に来て、それが名前

var result= dbHandle.db.run((query.drop(10).take(10)).result 

変数queryの任意の数を有することができるためだけの選択クエリですレコードの範囲を11から20まで選択する従業員テーブル。

ここで、 'nameFilter'に記載されている名前を持つレコードをフィルタリングする必要があります。 11から20までのレコードを選択します。つまり、 'IN'句を含むクエリが必要です。

これは単純なSlick SQLクエリではないことに注意してください。私は上記の形式でクエリをフレームする必要があります。

+0

クエリを変更しますか?または、マッチングをフィルタリングするだけですか? –

答えて

2

あなたは方法.inSetでこれを行うことができます(hereを参照してください):

スリック

スリッククエリが構成可能です。サブクエリは、他のScalaコードと同様に、型の整理が簡単にできます。

val address_ids = addresses.filter(_.city === "New York City").map(_.id) 
people.filter(_.id in address_ids).result // <- run as one query 

このメソッドでは、サブクエリが必要です。メモリ内の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 

あなたが入力をエスケープする.inSetBindを使用することを検討すべきであるという入力のソースに応じて、(this SO postを参照してください)。

関連する問題