본문 바로가기
MySql

MySQL 레일에서 여러 테이블 결합

by 베이스 공부 2021. 1. 3.
반응형

아래 mysql 쿼리를 rails activerecord에 어떻게 작성합니까?

select
    A.*,
    B.* 
from
    raga_contest_applicants_songs AS A 
    join
        raga_contest_applicants AS B 
        ON B.contest_applicant_id = A.contest_applicant_id 
    join
        raga_contest_rounds AS C 
        ON C.contest_cat_id = B.contest_cat_id 
WHERE
    C.contest_cat_id = contest_cat_id 
GROUP BY
    C.contest_cat_id    

두 테이블에 조인을 작성하는 방법을 알고 있습니다. 그러나 3 테이블에서 조인을 사용하는 방법에 대해 확신이 없습니다.

 

해결 방법

 

질문에서 얻은 SQL 쿼리를 다시 작성하려면 다음과 같아야한다고 생각합니다 (모델 관계를 완전히 시각화하는 데 어려움을 겪고 있으므로 약간의 추측입니다).

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

... joins 메서드가 두 조인과 WHERE 절을 모두 처리하고 마지막으로 group 호출이 이어집니다. .

참고 :


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

중첩 테이블을 조인하는 경우 해시처럼 나열 할 수 있습니다.

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

중첩 된 연결, 다중 수준 :

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

다음과 같이 ActiveRecord 쿼리 인터페이스 호출을 연결할 수도 있습니다.

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


   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

 

참조 페이지 https://stackoverflow.com/questions/16131201

 

 

반응형

댓글