Sql 在另一个表中查找正好有3条关联记录的所有记录

Sql 在另一个表中查找正好有3条关联记录的所有记录,sql,ruby-on-rails,rails-activerecord,Sql,Ruby On Rails,Rails Activerecord,我对以下型号有兴趣 class Price < ActiveRecord::Base has_many :line_items ... class AdvancedPriceLineItem < ActiveRecord::Base belongs_to :price .... class Price

我对以下型号有兴趣

class Price < ActiveRecord::Base
  has_many :line_items
  ...

class AdvancedPriceLineItem < ActiveRecord::Base
  belongs_to :price
  ....
class Price
我想找到所有的
Price
记录,这些记录正好有3个
LineItem
引用它

如何做到这一点

非常感谢

给你

select * from
price where  id in (select price_id
from LineItem
group by  price_id
having count(*) =3
)

对于活动记录,您可以尝试这种方法

Price.includes(:line_items).group("line_items.price_id").having("count(*) = 3")

如果价格表中的id等同于行项目中的其他列,请在内部进行相应更改query@anwar_hell
group by id
在这里有效吗??我认为行项目表
id
是uniq。您需要使用组非的外键primary@vishal.. 如果id是唯一的,则将其替换为子查询的选择列表中的其他选项,如price_idRemove“,count(id)”。和do IN而不是=sub-query.corrected了查询,但是使用=或IN与使用生成相同计划的解析器没有多大区别…这会引发以下错误
PG::UndefinedTable:error:表“line\u items”的子句条目中缺少
是的,您需要在查询中使用正确的关联名称和表名称。根据您的模型,我刚刚使用了这个名称。否则,请将模型和模式放在此处,并使用关联和names@Tarlen根据关联名称及其在
mysql
中的工作情况,此查询是正确的。根据您的错误,我认为如果您的表名是
advanced\u price\u line\u items
,则将组替换为
group(“advanced\u price\u line\u items.price\u id”)
这取决于您的表名否,它们应该是正确的。我可以调用
Price.last.line\u items
,它可以正常工作