我有一个数据模型,Customer
有很多Orders
。我现在需要提取所有只下1个订单的客户,我正在试图弄清楚要做什么。
答案 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)
考虑Customer
和Order
是ActiveRecord
类,并考虑您有代码行
belongs_to:Order类定义中的customer。并且还要考虑订单表有一个名为foreign_key
的{{1}}或索引列,如下所示,以获取此Customer对象。
customer_id