[英]How to use IN clause in Slick?
我有一個使用光滑的查詢,它不是一個簡單的光滑查詢。 該查詢是一個select查詢,它從名為Employee的表中獲取記錄。 結果是Employee
類。
現在有一個字符串列表
val nameFilter= List("Sachin","Naveen"")
這個“nameFilter”是動態的,它可能有任意數量的名稱
var result= dbHandle.db.run((query.drop(10).take(10)).result
變量query
只是Employee表的select查詢,它選擇11到20之間的記錄范圍。
現在我需要過濾“nameFilter”中提到的名稱的記錄,然后選擇11到20之間的記錄。這意味着我需要一個帶有'IN'子句的查詢。
請注意,這不是一個簡單的Slick SQL查詢,我必須以上述格式構建查詢。
您可以使用方法.inSet(請參閱此處 )執行此操作:
華而不實的
光滑的查詢是可組合的。 子查詢可以簡單地組合,其中類型可以解決,就像任何其他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來轉義輸入(請參閱此SO帖子 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.