環境
Ruby 3.0.2
Rails 6.1.4.1
前提条件
class Owner < ActiveRecord::Base
has_many :dogs
end
class Dog < ActiveRecord::Base
belongs_to :owner
end
左外部結合
左側のテーブルにしかないレコードも取得して結合する。
下の例でいうと、飼犬がいないオーナーのデータも取得できる。
Owner.left_joins(:dogs)
=> SELECT `owners`.* FROM `owners` LEFT OUTER JOIN `dogs` ON `dogs`.`owner_id` = `owners`.`id`
内部結合
結合条件に一致するレコードのみを結合する。
下の例でいうと、飼犬がいるオーナーのデータのみ取得できる。
Owner.joins(:dogs)
=> SELECT `owners`.* FROM `owners` INNER JOIN `dogs` ON `dogs`.`owner_id` = `owners`.`id`