rust diesel.rs 使用select max和其他参数

irlmq6kh  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(179)

我已经在rust中实现了mysql查询,但是我选择导致了一个错误。这是错误the traitdiesel::expression::MixedAggregatesdiesel::expression::is_aggregate::Yesis not implemented fordiesel::expression::is_aggregate::No`什么问题,我如何解决这个问题?

let sub = progress::table
  .filter(progress::user.eq(1))
  .group_by(progress:: otherid)
  .select((diesel::dsl::max(progress::updated), progress::otherid, progress::onemoreid));
SELECT otherid, onemoreid, MAX(updated) AS newest_updated
    FROM progress
    WHERE user = 1
    GROUP BY otherid

编辑:当我在select中没有progress::onemoreid时,错误不会发生。

np8igboo

np8igboo1#

柴油机文件的相关部分为以下段落:
Diesel遵循postgresql的group by语义,这意味着出现在group by子句中的任何列都被认为是聚合的。如果主键是group by子句的一部分,则相应表中的每个列都被认为是聚合的。Select子句不能混合聚合和非聚合表达式。
这个限制是因为否则你的查询可能会返回不确定的结果。毕竟,当查询产生多个可能的值时,应该选择onemoreid的哪个值。
MySQL允许编写这样的查询,但它们可能会返回不确定的结果。这意味着只返回一些值。甚至可能使用相同的数据执行相同的查询会返回不同的值。

相关问题