【问题标题】:How do I express the MySql function `GROUP_CONCAT(DISTINCT column)` in Arel?如何在 Arel 中表达 MySql 函数 `GROUP_CONCAT(DISTINCT column)`?
【发布时间】:2018-11-29 15:09:59
【问题描述】:

我可以使用

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)

这是一个语法错误。

【问题讨论】:

    标签: mysql arel


    【解决方案1】:

    这有点小技巧,但以下工作。

    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])。 (未经测试)

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 2013-09-21
      • 2011-03-06
      • 2013-04-12
      • 2021-01-30
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      相关资源
      最近更新 更多