Rails找到所有拥有1个订单的客户

时间:2014-04-07 15:39:38

标签: activerecord ruby-on-rails-4

我有一个数据模型,Customer有很多Orders。我现在需要提取所有只下1个订单的客户,我正在试图弄清楚要做什么。

3 个答案:

答案 0 :(得分:3)

使用此

Customer.joins(:orders).group(:id).having("count(orders.id) = 1")

这将创建一个类似的查询:

  

SELECT"客户"。* FROM"客户" INNER JOIN"订单"上   #&34;命令"" CUSTOMER_ID" ="客户"。" id" GROUP BY id HAVING   count(orders.id)= 1

您将获得恰好位于customers的所有order

答案 1 :(得分:1)

为避免对ID字段的模糊引用,可以使用:

Customer.joins(:orders).group("customers.id").having("count(orders.id) = 1")

将生成以下SQL:

SELECT "customers".* FROM "customers" INNER JOIN "orders" ON "orders"."customer_id" =
"customers"."id" GROUP BY customers.id HAVING count(orders.id) = 1

答案 2 :(得分:0)

考虑CustomerOrderActiveRecord类,并考虑您有代码行 belongs_to:Order类定义中的customer。并且还要考虑订单表有一个名为foreign_key的{​​{1}}或索引列,如下所示,以获取此Customer对象。

customer_id