如何将`inSet`与列的元组一起使用?
Posted
技术标签:
【中文标题】如何将`inSet`与列的元组一起使用?【英文标题】:How to use `inSet` with tuple of columns? 【发布时间】:2022-01-13 07:58:36 【问题描述】:在 Slick 中,我们可以对单个列使用 inSet
来执行 sql IN
子句。但我不知道如何将它与一对列一起使用。
PostgresQL 允许IN
的以下用法:
select * from table where (table.a, table.b) in ( values
(1, 'foo'),
(2, 'bar')
)
我认为我可以在 slick 中执行以下操作,但它无法编译:
TableQuery[Table].filter(
row => (row.a, row.b) inSet Seq(
(1, "foo"),
(2, "bar"))
)
有可能让它工作吗?
【问题讨论】:
【参考方案1】:现在您可以手动完成,编写如下内容:
val expectedTuples = Seq(
(1, "foo"),
(2, "bar"),
(3, "baz")
)
TableQuery[Table].filter(
row =>
expectedTuples.map
case(fst, snd) => row.a === fst && row.b === snd
.reduce(_ || _)
)
这是已知的feature request in slick。
【讨论】:
我想不出减少Rep[Boolean]
s 来合并它们。好主意。但我认为这有点低效,因为它总是会检查每个元组。就我而言,我有数千个元组,所以我想我会使用原始 sql。以上是关于如何将`inSet`与列的元组一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何对返回 orm 对象和自定义列的元组的查询进行正确排序、分组?
如何修复特征联合和管道中的元组对象错误(使用 sklearn 时)?