2015-10-28 7 views
5

私は3つのテーブルを持っています。そのうちの2つは通常のデータ・テーブルであり、1は多対多ジャンクション・テーブルです。多対多リレーションシップのジャンクション・テーブルに対するSQLジョイン

2つのデータテーブル:

table products 

product_id | product_name | product_color 
----------------------------------------- 
1   | Pear   | Green 
2   | Apple  | Red 
3   | Banana  | Yellow 

table shops 

shop_id | shop_location 
-------------------------- 
1   | Foo street 
2   | Bar alley 
3   | Fitz lane 

私はshop_idさんとproduct_id年代が含まれているジャンクションテーブルを持っている:

table shops_products 

shop_id | product_id 
-------------------- 
1   | 1 
1   | 2 
2   | 1 
2   | 2 
2   | 3 
3   | 2 
3   | 3 

私がしたいですshop_idで買い物をしている商品からデータを選択するここではジョイン、左ジョイント、インナージョイントがありますが、ここで何をやっているのか、何がうまく行っているのか分かりません。私が持っていたが、彼らは指定されたお店にある場合だけに関係なく、すべての製品を返されたクエリは以下の通りです:

SELECT products.product_name, products.product_color 
FROM products 
LEFT OUTER JOIN shops_products 
ON products.product_id = shops_products.product_id 
AND shops_products.shop_id = 3 
LEFT OUTER JOIN shops 
ON shops_products.shop_id = shops.shop_id 

予想される出力は以下の通りです:

product_name | product_color 
---------------------------- 
Apple  | Red 
Banana  | Yellow 

これは、MySQLであり、あなたに感謝どんな助けでも、本当に感謝しています。

答えて

15

私は外から開始して移動したいと だから、すべての列がすべてひとつのテーブルで一緒に詰まった、あなたのような何かを書くことができます想像:。

SELECT * 
FROM products 
WHERE shop_id = 3 

ますこのステートメントを可能にするためにジョインを追加するだけです。次にジョイン・テーブルを追加する必要があることはわかっています(product_idがあるため、productsテーブルに直接ジョインするテーブルなので)。 shop_idがすでに参加し、テーブルの上に存在するため、...

SELECT products.* 
FROM products 
INNER JOIN shops_products 
ON products.product_id = shops_products.product_id 
WHERE shops_products.shop_id = 3 

と実際にあなたはここに停止することができますので、参加している次の何が起こっています。しかし、あなたはまた、最終的な列のセットで店名を望んでいたとしましょう、あなたはショップテーブルの結合を追加するでしょう。

SELECT products.*, shops.shop_name 
FROM products 
INNER JOIN shops_products 
ON products.product_id = shops_products.product_id 
INNER JOIN shops 
ON shops_products.shop_id = shops.shop_id 
WHERE shops_products.shop_id = 3 
+1

いいですね! –

+0

ありがとうございました!これは私の問題を解決し、解決策を理解するのを助けました。もう一度ありがとう、私はそれが私にできるように5分でそれを受け入れる:) –

1

これを試すことができます。

SELECT products.product_name, products.product_color 
FROM products 
INNER JOIN shops_products 
ON products.product_id = shops_products.product_id 
WHERE shops_products.shop_id = 3 
0
SELECT aa.product_id, aa.product_name, aa.product_color 
FROM products AS aa 
INNER JOIN shops_products AS bb 
ON aa.product_id = bb.procuct_id 
WHERE bb.shop_id = 3; 
関連する問題