【发布时间】:2015-05-11 11:57:29
【问题描述】:
我有一个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".* ...
^
【问题讨论】:
标签: sql ruby-on-rails activerecord arel distinct-on