Mysql
 sql >> Base de données >  >> RDS >> Mysql

Jointures de tables multiples dans les rails

Pour réécrire la requête SQL que vous avez dans votre question, je pense que cela devrait ressembler à ce qui suit (bien que j'aie du mal à visualiser pleinement vos relations de modèle, c'est donc un peu une conjecture):

RagaContextApplicantsSong.
  joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat).
  group('raga_contest_rounds.contest_cat_id')

...tel que le joins prend en charge les deux jointures ainsi que le WHERE clause, suivie enfin du group appeler.

Comme plus pour référence :

Si vous rejoignez plusieurs associations au même modèle vous pouvez simplement les lister :

Post.joins(:category, :comments)
Returns all posts that have a category and at least one comment

Si vous joignez des tables imbriquées, vous pouvez les lister sous forme de hachage :

Post.joins(:comments => :guest)
Returns all comments made by a guest

Associations imbriquées, plusieurs niveaux :

Category.joins(:posts => [{:comments => :guest}, :tags])
Returns all posts with their comments where the post has at least one comment made by a guest

Vous pouvez également enchaîner les appels de l'interface de requête ActiveRecord de manière à :

Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)

Si tout le reste échoue, vous pouvez toujours passer un fragment SQL directement dans les joins méthode comme un tremplin pour passer de votre requête de travail à quelque chose de plus centré sur l'ARQI

   Client.joins('LEFT OUTER JOIN addresses ON addresses.client_id = clients.id')
=> SELECT clients.* FROM clients LEFT OUTER JOIN addresses ON addresses.client_id = clients.id