sql >> Databasteknik >  >> RDS >> Mysql

Flera bord sammanfogar i skenor

För att skriva om SQL-frågan du har i din fråga, tror jag att den borde se ut så här (även om jag har svårt att helt visualisera dina modellrelationer, så det här är lite gissningar):

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

...så att joins Metoden tar hand om båda de två kopplingarna såväl som WHERE sats, följt slutligen av group ring.

Som mer för referens:

Om du går med i flera föreningar till samma modell kan du helt enkelt lista dem :

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

Om du går med i kapslade tabeller kan du lista dem som i en hash:

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

Kapslade associationer, flera nivåer:

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

Du kan också koppla ActiveRecord Query Interface-anrop så att:

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

Om allt annat misslyckas kan du alltid passera ett SQL-fragment direkt till joins metod som ett språngbräde för att komma från din arbetsfråga till något mer ARQI-centrerat

   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. Hur man importerar STORA sql-filer till mysql-tabellen

  2. Konvertera "datetimeoffset" till "smalldatetime" i SQL Server (T-SQL-exempel)

  3. uppdatera flera rader med limit i mysql?

  4. Behöver Laravels soft_delete index på MySQL?