我可以使用
Arel::Nodes::NamedFunction.new('GROUP_CONCAT', [an_arel_table[:a_column]])
生成
GROUP_CONCAT(a_column)
在我的SELECT
语句中。但是,如何添加DISTINCT
选项?
Arel::Nodes::NamedFunction.new('GROUP_CONCAT', ['DISTINCT', an_arel_table[:a_column]])
收益
GROUP_CONCAT(DISTINCT, a_column)
这是语法错误。
答案 0 :(得分:0)
有点骇人听闻,但以下方法可行。
Arel::Nodes::InfixOperation
提供了一种生成序列X DISTINCT Y
的机制。将X
设置为空白(Arel::Nodes::SqlLiteral.new('')
),我们得到DISTINCT Y
。
Arel::Nodes::NamedFunction.new('GROUP_CONCAT', [
Arel::Nodes::InfixOperation.new('DISTINCT',
Arel::Nodes::SqlLiteral.new(''),
an_arel_table[:a_column]])])
较新版本的Arel(Rails 4.2以后)支持UnaryOperation
,而可以允许将DISTINCT
修饰符表示为Arel::Nodes::UnaryOperation.new('DISTINCT', an_arel_table[:a_column])
。 (未测试)