我如何在arel中表达mysql函数“group\u concat(distinct column)”?

wbrvyc0a  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(428)

我可以用

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)

这是一个语法错误。

j5fpnvbx

j5fpnvbx1#

这是一个有点黑客,但下面的作品。 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(beyond rails 4.2)支持 UnaryOperation 可以表达 DISTINCT 修改器组件 Arel::Nodes::UnaryOperation.new('DISTINCT', an_arel_table[:a_column]) . ((未经测试)

相关问题