sql >> Base de Datos >  >> RDS >> Mysql

Múltiples uniones de mesa en rieles

Para reescribir la consulta SQL que tiene en su pregunta, creo que debería ser como la siguiente (aunque me está costando mucho visualizar completamente las relaciones de su modelo, así que esto es un poco de conjetura):

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

... tal que el joins El método se encarga de las dos uniones, así como del WHERE cláusula, seguida finalmente por el group llamar.

Más como referencia:

Si está uniendo varias asociaciones al mismo modelo simplemente puede enumerarlas :

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

Si está uniendo tablas anidadas, puede enumerarlas como un hash:

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

Asociaciones anidadas, nivel múltiple:

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

También puede encadenar llamadas de la interfaz de consulta de ActiveRecord de manera que:

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

Si todo lo demás falla, siempre puede pasar un fragmento de SQL directamente a el joins método como un trampolín para pasar de su consulta de trabajo a algo más centrado en 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