如何在多个JOIN之后正确选择要在续集中返回的列?

时间:2018-06-11 04:00:50

标签: sql json ruby database sequel

我有一个包含多个JOIN的查询。

目前,我收到了所有表格中所有列的结果。并且有些列具有相同的名称,因为它是我的数据库中的方式。如何选择要返回的列并在结果集中调整其名称

我试过了:

    result = MyModel1.join(:table2, id: :table2_id)


    if condition1
      result = result.join(.....).where(.....)
    end


    if condition2
      result = result.join(.....).where(.....)
    end

    # and so on....


    result

如果我这样做:

  result.select([Sequel[:model1][:column1], Sequel[:model2][:column2]])

在我将其转换为json后,我最终得到了这个:

  [{"row":["column1_value1","column1_value11"]},{"row":["column1_value2","column1_value22"]},{"row":["column1_value3","column1_value33"]}]

"行&#34 ;?如何摆脱它?如何添加列的名称并更改该json响应的结构,使其看起来正确?

我想要这样的事情:

  [
    {"column1": "column1_value1", "column2" "column1_value11"},
    {"column1": "column1_value2", "column2" "column1_value22"},
    {"column1": "column1_value3", "column2" "column1_value33"}
  ]

2 个答案:

答案 0 :(得分:0)

如果结果相对较小,您可以处理输出。

set

后者可能在一个循环中完成,我展示了链式地图以澄清所需的步骤。

答案 1 :(得分:0)

您可以使用as method

Sequel.select(
  Sequel[:table1][:column1].as(:alias1),
  Sequel[:table2][:column2].as(:alias2)
)