我有一个 Message
ActiveRecord 模型,我想选择具有不同 conversation_partner_id
的所有消息。我目前将 DISTINCT ON 子句指定为字符串,但我想知道是否可以将其作为 Arel 表达式提供,以及是否会有好处。我的声明如下:
Message.select('DISTINCT ON ("messages"."conversation_partner_id") messages.*').from(t)
其中 t
是 messages
表的并集,并指定为稍微复杂的 Arel
表达式。我将其省略,因为它独立于 SELECT
问题并且工作得很好。
以下代码不起作用工作:
Message.select([
Arel::Nodes::DistinctOn.new(Message.arel_table[:conversation_partner_id]),
Message.arel_table[Arel.star]
]).from(t)
它会导致 SQL 格式错误,因为它在 DISTINCT ON ()
子句后面放置了一个逗号:
SELECT DISTINCT ON ("messages"."conversation_partner_id"), "messages".* ...
^
最佳答案
如果你尝试这样做:
Message.arel_table
.project(Arel.star)
.distinct_on(Message.arel_table[:conversation_partner_id])
.to_sql
你得到这个:
SELECT DISTINCT ON ( \"messages\".\"conversation_partner_id\" ) * FROM ...
关于sql - 如何将 "DISTINCT ON"与Arel/ActiveRecord结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30167079/