【Rails】テーブル結合方法
テーブル結合とは
違うテーブルからそれぞれデータがほしいとき それらを結合して1つのテーブルからデータ取得することができます。
テーブル例
著者が1つ以上の書籍を出版している例を用いて以後説明していきます。
1. 内部結合(INNER JOIN)
基礎構文
モデル.joins(:関連名)
モデル同士の関連付け
class Author < ApplicationRecord #「books」が関連名 has_many :books, dependent: :destroy end class Book < ApplicationRecord #「authors」が関連名 belongs_to :author end
テーブル結合例
authorsテーブルとbooksテーブルをauthor_idを使用して結合する
# selectを省略するとauthorsテーブルの全カラムを取得する Author.joins(:books).select("books.*,authors.name") 発行sql SELECT books.*,authors.name FROM `authors` INNER JOIN `books` ON `books`.`author_id` = `authors`.`id`
結合イメージ
2. 外部結合(LEFT OUTER JOIN)
基礎構文
モデル.left_outer_joins(:関連名)
モデル同士の関連付け
内部結合と同じように設定します
テーブル結合例
Author.left_outer_joins(:books).select("authors.*,books.title") 発行sql SELECT authors.*,books.title FROM `authors` LEFT OUTER JOIN `books` ON `books`.`author_id` = `authors`.`id`
結合イメージ
authorsテーブルにbooksテーブルがくっつくイメージです。
参考
https://style.potepan.com/articles/17010.html https://atmarkit.itmedia.co.jp/ait/articles/1703/01/news186.html