##やりたいこと
3つ(複数)のテーブルの結合してデータを抽出する
【詳細】
商品(products)テーブル、商品名関連付けテーブル(product_i18ns)、 商品販売対象国関連付けテーブル(product_countries)を結合してアメリカを販売国対象とする商品一覧(日本語)を抽出する
##テーブル構成
商品(products)テーブル
id | image | created_at |
---|---|---|
1 | 40e8a18f.jpg | 2018-07-23 00:00:00 |
2 | 40e8a19f.jpg | 2018-07-23 00:00:00 |
3 | 40e8a20f.jpg | 2018-07-23 00:00:00 |
4 | 40e8a21f.jpg | 2018-07-23 00:00:00 |
5 | 40e8a22f.jpg | 2018-07-23 00:00:00 |
商品名関連付けテーブル(product_i18ns)
id | product_id | locale_id | name | created_at |
---|---|---|---|---|
1 | 1 | 1 | メロン | 2018-07-23 00:00:00 |
2 | 1 | 2 | melon | 2018-07-23 00:00:00 |
3 | 2 | 1 | いちご | 2018-07-23 00:00:00 |
4 | 2 | 2 | strawberry | 2018-07-23 00:00:00 |
5 | 3 | 1 | りんご | 2018-07-23 00:00:00 |
6 | 3 | 2 | apple | 2018-07-23 00:00:00 |
5 | 3 | 1 | オレンジ | 2018-07-23 00:00:00 |
6 | 3 | 2 | orange | 2018-07-23 00:00:00 |
※locale_id(1)=日本(ja) locale_id(2)=英語(en) |
商品販売対象国関連付けテーブル(product_countries)
id | product_id | coutry_id | created_at |
---|---|---|---|
1 | 1 | 233 | 2018-07-23 00:00:00 |
2 | 2 | 10 | 2018-07-23 00:00:00 |
3 | 3 | 233 | 2018-07-23 00:00:00 |
4 | 4 | 120 | 2018-07-23 00:00:00 |
※coutry_id(233)=アメリカ |
##SQL文
SELECT
抽出したいカラム
FROM
メインテーブル
(RIGHT/LEFT) JOIN
結合するテーブル1
ON
メインテーブルとリレーションしている外部キー(複合主キー)
(RIGHT/LEFT) JOIN
結合するテーブル2
ON
メインテーブルとリレーションしている外部キー(複合主キー)
WHERE
条件
SELECT
prodcuts.id, product_i18ns.name
FROM
products
JOIN
product_i18ns
ON
products.id = product_i18ns.id
RIGHT JOIN
product_coutries
ON
products.id = peoduct_coutries.id
WHERE
locale_id=1 && country_id=233
##結果
id | name |
---|---|
1 | メロン |
3 | りんご |