在 Squeryl 中使用聚合连接多个表

Posted

技术标签:

【中文标题】在 Squeryl 中使用聚合连接多个表【英文标题】:Join multiple tables with aggregation in Squeryl 【发布时间】:2013-04-25 14:41:54 【问题描述】:

我正在尝试将卡片与零件连接起来,然后将总库存值加入零件(某些零件没有库存行)。

我有以下我认为可行的东西..

def stockPerBase = from(stock)(s => groupBy(s.base) compute(sum(s.quantity)))
def allCardsWithStock = 
    join(cards, parts, stockPerBase.leftOuter)((c,p,s) =>
        on(c.partId === p.id, p.base === s.map(_.key))  
        select(c, p, s.measures))

但是我得到以下错误:

too many arguments for method on: (table: org.squeryl.Table[A])(declarations: A => Seq[org.squeryl.dsl.ast.BaseColumnAttributeAssignment])Unit
[error] on(c.partId === p.id, p.base === s.map(_.key))  

非常感谢任何有关我如何进行此类查询的帮助。

【问题讨论】:

【参考方案1】:

select 子句应位于查询中的 on 之前。尝试颠倒这两个子句的顺序,它应该可以工作。

【讨论】:

以上是关于在 Squeryl 中使用聚合连接多个表的主要内容,如果未能解决你的问题,请参考以下文章

Postgres - 连接三个表并在查询中对数据使用聚合函数

连接两个表的字符串的聚合函数?

PostgreSQL - 从连接表中选择聚合列并使用它来求和

在 Redshift 中高效地连接和聚合大量事实表

Scala 反射和 Squeryl

使用内连接和聚合函数更新列