Postgresql Scala,Quill-如何在Quill查询中使用SQL IN子句?
我有一个数据库,该模型如下所示:Postgresql Scala,Quill-如何在Quill查询中使用SQL IN子句?,postgresql,scala,quill,scala-cats,Postgresql,Scala,Quill,Scala Cats,我有一个数据库,该模型如下所示: case class Data { id: Int, value: Json } 我想创建搜索查询,它可以通过csv从valueJSON中过滤一些字段: def search(id: Int) = { .... val list = List("value1", "value2", "value3") quote( myTable.filter( t => t.id
case class Data {
id: Int,
value: Json
}
我想创建搜索查询,它可以通过csv
从value
JSON中过滤一些字段:
def search(id: Int) = {
....
val list = List("value1", "value2", "value3")
quote(
myTable.filter( t => t.id == lift(id)))
.dynamic
.filter(_ => liftQuery(list).contains(infix""" t.name """.pure.as[Boolean]))
}
问题是它不能很好地工作。我不知道如何用另一种方式在子句中使用。
value
是一个包含字段name
的JSON,现在我想搜索myTable
中适合传入列表的值的所有元素。
我也试着做一些类似的事情:
infix""" t.name in ${list.mkString(",")} """.pure.as[Boolean]
但它也不起作用。你能帮我解决吗?在quill文档中的
子句中没有很好的示例。quote(查询[数据].filter(d=>liftQuery(列表).contains(中缀“value->>“name”))
结果:
SELECT d.id, d.value FROM data d WHERE value->>'name' IN (?, ?, ?)
因此,value
列中的值是具有字段name
的JSON对象,如下所示:{“name”:“value1”}
?您希望找到列表中包含name
值的所有行,如此查询中所示:select*from data where value->>name'in('value1','value2')代码>?是的,正是我想做的。嗯,看起来和我试过的一样。在上面的示例中,您的代码和我的代码有什么区别:过滤器(=>liftQuery(list).contains(中缀“.t.name”“”.pure.as[Boolean])
?我使用->
访问JSON对象字段的字符串值。有关更多详细信息,请参阅。另外,我删除了.pure.as[Boolean]
,因为它不需要。