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
,它可以正常工作