LoginSignup
97
102

More than 5 years have passed since last update.

【SQL】3つ(複数)のテーブルの結合してデータを抽出する

Posted at

やりたいこと

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 りんご
97
102
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
97
102