簡體   English   中英

如何在Slick中使用IN子句?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM