sql >> Database teknologi >  >> RDS >> Mysql

Flere bord samles i skinner

For at omskrive den SQL-forespørgsel, du har i dit spørgsmål, tror jeg, at den burde være som følgende (selvom jeg har svært ved at visualisere dine modelforhold fuldt ud, så dette er lidt gætværk):

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

...sådan at joins metode tager sig af begge de to joinforbindelser såvel som WHERE klausul, efterfulgt til sidst af group ring.

Som mere til reference:

Hvis du tilslutter dig flere foreninger til den samme model kan du blot angive dem :

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

Hvis du tilslutter dig indlejrede tabeller, kan du liste dem som i en hash:

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

Indlejrede associationer, flere niveauer:

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 også sammenkæde ActiveRecord Query Interface-opkald sådan, at:

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

Hvis alt andet fejler, kan du altid passere et SQL-fragment direkte ind i joins metode som et springbræt til at komme fra din arbejdsforespørgsel til noget mere ARQI-centreret

   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. Hvordan konverteres en MySQL DB til XML?

  2. Referencer Oracle brugerdefinerede typer over DBLINK?

  3. Sådan tilføjes linjenumre i SQL Server Management Studio ( SSMS) - SQL Server / TSQL vejledning del 11

  4. LN() Funktion i Oracle