在Squeryl ORM的WHERE子查询中使用gt,gte等

时间:2012-07-01 20:01:42

标签: scala orm subquery squeryl

我最近开始评估Squeryl ORM并且它看起来很棒,但最后我找到了一个SQL查询,似乎与Squeryl“构建”有问题。

我希望所有产品的数量都高于所有产品的平均数量。 在SQL中,这看起来像

SELECT * FROM product p WHERE p.quantity > (SELECT AVG(quantity) FROM product)

我已经发现Squeryl在in() - 子句子查询中支持exists()notExists()where。但由于Squeryl也支持avg聚合,我希望这样的事情是可能的:

val avgQuantity = from(products)(p => compute(avg(p.quantity)))
val oftenOccuringProducts = from(products)(p => where(p.quantity gt avgQuantity) select(p))

可悲的是,这引起了:

type mismatch; found : org.squeryl.Query[org.squeryl.dsl.Measures[Option[org.squeryl.PrimitiveTypeMode.FloatType]]] 
required: org.squeryl.dsl.NumericalExpression[?]

当然,我能够在2个查询中执行此操作(首先,获取平均数量,然后在第二个查询中使用它)但我想知道是否可以使用一个查询执行包括子查询

这对Squeryl来说是不可能的,还是我错过了什么?

如果有可能,我会感激任何帮助,如果,如何。

谢谢,

塞巴斯蒂安

1 个答案:

答案 0 :(得分:1)

根据相同的讨论,邮件列表a fix was pushed到Squeryl master分支,并将包含在下一个版本中。