sql >> Database >  >> RDS >> Mysql

Meerdere tafelverbindingen in rails

Om de SQL-query die je in je vraag hebt te herschrijven, denk ik dat het als volgt zou moeten zijn (hoewel ik het moeilijk heb om je modelrelaties volledig te visualiseren, dus dit is een beetje giswerk):

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

...zodat de joins methode zorgt voor zowel de twee joins als de WHERE clausule, gevolgd door de group bellen.

Als meer ter referentie:

Als u zich bij meerdere verenigingen aansluit bij hetzelfde model u kunt ze gewoon vermelden :

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

Als u zich bij geneste tabellen voegt, kunt u deze weergeven als in een hash:

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

Geneste associaties, meerdere niveaus:

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

U kunt ActiveRecord Query Interface-aanroepen ook zo koppelen dat:

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

Als al het andere faalt, kun je altijd een SQL-fragment direct in de joins methode als een opstap om van uw werkvraag naar iets meer ARQI-gericht te gaan

   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



  1. Transparante gegevensversleuteling en altijd versleuteld

  2. Query met LEFT JOIN retourneert geen rijen voor telling van 0

  3. SQL:GROUP BY en MAX gebruiken op meerdere kolommen

  4. Beveiligde bestanden om te downloaden