【问题标题】:AREL: Common Table Expression with explicit columnsAREL:具有显式列的公用表表达式
【发布时间】:2016-10-07 19:13:31
【问题描述】:

AREL README 简要介绍了 CTE,但没有提及如何处理 CTE 中的显式列列表。例如。像这样的 CTE:

WITH my_query (col1, col2, col3, col4) AS ( SELECT a, b, a, b FROM my_table )

我能够使用复杂的 SqlLiteral 生成上述内容,但有更好的方法吗?

示例解决方案:

cte_table = Arel::Table.new(:source_qry) cte_qry = Arel::Nodes::SqlLiteral.new("source_qry (col1, col2, col3, col4)") user_qry = Arel::Nodes::SqlLiteral.new("(SELECT a, b, a, b FROM my_table)") cte_table_qry = Arel::Nodes::As.new(cte_qry, user_qry) cte_table.project(%w(col1 col2)).with(cte_table_qry)

【问题讨论】:

    标签: ruby-on-rails common-table-expression arel


    【解决方案1】:

    我认为 Arel 目前无法处理此问题。我不知道如何完全解决这个问题,但可以建议如何改进您的解决方案:

    cte_table = Arel::Table.new(:source_qry)
    cte_qry = Arel.sql("source_qry (col1, col2, col3, col4)")
    
    my_table = Arel::Table.new(:my_table)
    user_qry = my_table.project(my_table[:a], my_table[:b], my_table[:a], my_table[:b])
    
    cte_table_qry = Arel::Nodes::As.new(cte_qry, user_qry)
    
    cte_table.project(cte_table[:col1], cte_table[:col2]).with(cte_table_qry)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 2020-04-11
      • 2022-11-14
      • 2011-02-18
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多