活动记录(MYSQL) - 从多列

时间:2016-11-02 18:41:15

标签: mysql activerecord

Ver 14.14 Distrib 5.1.73

activerecord (4.1.14)

我有一个属于贷方和借方的交易模型。我想在一个SQL查询中找到机构交易的所有uniq交易对手。下面的查询有效,但只是因为我扁平化了unique-ify SQL查询后的数组:

Trade.where("borrower_id = :id OR lender_id = :id", id: institution.id).uniq.pluck(:lender_id, :borrower_id).flatten.uniq

(我知道这包括机构本身,因此我们在使用[1,2,3,4] - [1]

后进行规范化

但我想做的是使用Group By子句或其他东西,以便我的SQL查询处理flatten.uniq部分。

以下内容不起作用,因为它返回lender_idborrower_id的唯一组合的嵌套数组:

Trade.where("borrower_id = :id OR lender_id = :id", id: institution.id).group(:lender_id, :borrower_id).uniq.pluck(:lender_id, :borrower_id)

=> [[1,2], [1,3], [2,3]]

我想要一个只有JUST唯一ID的平面数组:[1,2,3]

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我不明白你在尝试什么,或者为什么你想在没有任何聚合函数的情况下包含GROUP BY子句。

FWIW,有效查询可能如下所示......

SELECT DISTINCT t.lender_id
              , t.borrower_id
           FROM trades t
          WHERE 28 IN(t.borrower_id,t.lender_id);