반응형
Rails ActiveRecord : INNER JOIN 대신 LEFT JOIN으로 조인합니다.
이 코드가 있습니다
User.find(:all, :limit => 10, :joins => :user_points,
:select => "users.*, count(user_points.id)", :group =>
"user_points.user_id")
다음 SQL을 생성합니다.
SELECT users.*, count(user_points.id)
FROM `users`
INNER JOIN `user_points`
ON user_points.user_id = users.id
GROUP BY user_points.user_id
LIMIT 10
INNER JOIN 대신 LEFT JOIN을 다른 방법으로 User.find_by_sql
만들고 수동으로 쿼리를 입력하는 것이 가능합니까?
당신은 이것을 시도 할 수 있습니다
User.find(:all, limit: 10,
joins: "LEFT JOIN `user_points` ON user_points.user_id = users.id" ,
select: "users.*, count(user_points.id)",
group: "user_points.user_id")
나중에 참조하기 위해 추가 :all
하면 더 이상 사용되지 않는 메시지가 표시됩니다. 이후 버전의 레일에서는 다음과 같이 메서드를 간단히 연결할 수 있습니다.
User.joins("LEFT JOIN `user_points` ON user_points.user_id = users.id").select("users.*, count(user_points.id)").group("user_points.user_id")
또는 다음 과 같은 범위를 사용 하십시오.
scope :my_scope_name_here, -> {
joins("LEFT JOIN `user_points` ON user_points.user_id = users.id")
.select("users.*, count(user_points.id)")
.group("user_points.user_id")
}
과 .where
사이를 연결할 수도 있습니다 . 이것이 미래의 누군가에게 도움이되기를 바랍니다..join
.select
Rails 5에는 left_outer_joins 메소드가 있습니다. 그래서 당신은 할 수 있습니다
User.left_outer_joins(:user_points)
또는 별칭 사용
User.left_joins(:user_points)
반응형
'Program Tip' 카테고리의 다른 글
.NET 애플리케이션에 스크립팅 기능 추가 (0) | 2020.10.30 |
---|---|
주어진 선택기와 일치하는 부모가있는 항목을 제외하는 JQuery 선택기는 무엇입니까? (0) | 2020.10.29 |
MSTest를 사용하여 비동기 코드를 테스트하는 방법 (0) | 2020.10.29 |
Python에서 Excel 파일을 어떻게 열 수 있습니까? (0) | 2020.10.29 |
Ruby에서 세미콜론을 사용할 수 있습니까? (0) | 2020.10.29 |