2017-05-26 144 views
1

我有一個查詢寫的是使用光滑,它不是一個普通的光滑的查詢。 查詢是一個select查詢,它從一個名爲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 

該方法.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 

根據該輸入你應該考慮使用.inSetBind逃脫輸入(見this SO post)的來源。