2017-09-12 9 views
0

私は3テーブルのDB:categories,items,relationを持っています。 categoriesにカテゴリが含まれています。商品はitemsに格納され、relationはバインディングテーブルであり、製品IDとカテゴリIDまたはカテゴリを格納します。他のpk to pkテーブルで記述されている2つのテーブルの関係をクエリする方法は?

enter image description here enter image description here enter image description here

どのように私は、アイテムの特定のリストについては、すべてのカテゴリの名前を得ることができますか?

+2

テーブルを単に 'ジョインする '。 – jarlh

+0

ツリーテーブル間の単純な内部結合と見えます – bksi

+1

https://www.w3schools.com/sql/sql_join.asp – etsa

答えて

2

LEFT JOINこのように簡単に試すことができます。

SELECT 
    * 
FROM 
    items AS i 
LEFT JOIN relation AS r ON i.id = r.id_items 
LEFT JOIN categories AS c ON r.id_cat = c.id 

これが役に立ちます。クエリがあなたなら、私を知ってみましょう

テーブルの関係に

SELECT 
    * 
FROM 
    items AS i 
RIGHT JOIN relation AS r ON i.id = r.id_items 
LEFT JOIN categories AS c ON r.id_cat = c.id 
を関係を定義している項目のみを与える以下ものの、クエリの上

はあなたにも、関係テーブルにマッピングされたノートあるすべてのアイテムを与えますエラーが発生します。

3

ただ、それらを結合:INNER JOINをすることを

SELECT * 
FROM relation r 
INNER JOIN items i ON r.id_items = i.id 
INNER JOIN categories c ON r.id_cat = c.id 

注のみ、両方のテーブルに表示レコードを選択します。 *はすべての列を選択します。これらのすべてを必要としない場合は、i.id、i.name、c.id、c.nameなどのようなものを選択することができます。

+0

はいこれも機能します。いいです! –

1
SELECT distinct(c.name) from categories c 
JOIN relation as r on c.id = r.id_cat 
JOIN items as c on i.id = r.id_items 
WHERE i.id in (8, x, y, z, ...etc) 
関連する問題