Pourquoi ces deux requêtes produisent-elles des résultats différents?
FbGroup.where('fb_groups.id IN (?)', ids).length
> 300
FbGroup.joins(:fb_posts).where('fb_groups.id IN (?)', ids).length
> 500
3 Réponses :
Pourquoi ces deux requêtes produisent-elles des résultats différents? P> blockQuote>
La jointure peut entraîner des enregistrements 1: N (un à plusieurs). Par exemple. Si un
fbgroup code> a deuxFBPost code>, vous obtiendrez deux enregistrements lorsque vous vous joignez. p>Le résultat souhaité est de rejoindre FB_Posts mais avant de rejoindre, je voudrais filtrer FB_Groups par des ID spécifiques. Comment puis-je faire ça? P> blockQuote>
Votre deuxième requête fait déjà cela. Lorsque vous filtrez avec la jointure ou rejoindre, puis filtrez dans une requête extérieure, vous obtiendriez toujours les mêmes résultats. P>
Mon résultat souhaité est de rejoindre
fb_poststs code> mais avant de rejoindre, je voudrais filtrerfb_groups code> par des ID spécifiques. Comment puis-je faire ça? P>J'ai utilisé
fb_groups code> avecID code>1 code>,2 code> et3 code> juste pour Exemple P>FbGroup.where(id: [1, 2, 3]).joins(:fb_posts).count
Je pense que c'est une duplication des enregistrements dans des jointures. Vous devriez utiliser groupe_by avec des jointures pour l'éliminer. Essayez, veuillez corriger si je me trompe. P> p>