t6d*_*t6d 5 sql activerecord ruby-on-rails arel distinct-on
我有一个MessageActiveRecord模型,我想选择所有具有不同的消息conversation_partner_id.我目前正在将该DISTINCT ON子句指定为字符串,但我想知道它是否可以作为Arel表达式提供,以及是否会有好处.我的发言如下:
Message.select('DISTINCT ON ("messages"."conversation_partner_id") messages.*').from(t)
Run Code Online (Sandbox Code Playgroud)
where t是messages表的并集,并指定为有点复杂的Arel表达式.我把它留下来,因为它独立于SELECT问题并且工作得很好.
下面的代码并不能正常工作:
Message.select([
Arel::Nodes::DistinctOn.new(Message.arel_table[:conversation_partner_id]),
Message.arel_table[Arel.star]
]).from(t)
Run Code Online (Sandbox Code Playgroud)
它导致SQL格式错误,因为它在DISTINCT ON ()子句后放置逗号:
SELECT DISTINCT ON ("messages"."conversation_partner_id"), "messages".* ...
^
Run Code Online (Sandbox Code Playgroud)
如果你尝试这样做:
Message.arel_table
.project(Arel.star)
.distinct_on(Message.arel_table[:conversation_partner_id])
.to_sql
Run Code Online (Sandbox Code Playgroud)
你得到这个:
SELECT DISTINCT ON ( \"messages\".\"conversation_partner_id\" ) * FROM ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |