这两个查询为什么产生不同的结果?
FbGroup.where('fb_groups.id IN (?)', ids).length
> 300
FbGroup.joins(:fb_posts).where('fb_groups.id IN (?)', ids).length
> 500
我想要的结果是加入fb_posts
,但是在加入之前,我想用特定的ID过滤fb_groups
。我该怎么办?
答案 0 :(得分:0)
为什么这两个查询产生不同的结果?
联接可能会导致1:N(一对多)记录。例如。如果一个FbGroup
有两个FbPost
,则您加入时将获得两条记录。
我想要的结果是加入fb_posts,但是在加入之前,我想按特定的ID过滤fb_groups。我该怎么办?
您的第二个查询已执行此操作。当您使用联接进行过滤或联接,然后在外部查询中进行过滤时,您仍将获得相同的结果。
答案 1 :(得分:0)
我想要的结果是加入
fb_posts
,但是在加入之前,我想用特定的ID过滤fb_groups
。我该怎么办?
我仅将fb_groups
与id
1
,2
和3
一起使用
FbGroup.where(id: [1, 2, 3]).joins(:fb_posts).count
答案 2 :(得分:0)
我认为它是在联接中复制记录。您应将group_by与联接一起使用以消除它。试试
FbGroup.joins(:fb_posts).where('fb_groups.id IN (?)', ids).group('fb_groups.id').length
如果我错了,请纠正。