2017-01-22 11 views
1

からマッチを取得する:基本的にJava MySQL | MySQLで3つのテーブルを考慮すると、多対多のグループ

product 
id - name - (more columns, irrelevant) ... 
13 - chair 
64 - table 

method 
id - name 
1 - welding 
2 - stamping 
10 - forging 

product-method (many-to-many) 
product_id - method_id 
13 - 1 
13 - 2 
13 - 10 
64 - 1 

を、私は必要なもの、特定の製品にリンクされているメソッドの一覧です。
この例では、椅子を作るために使用されるすべてのメソッドを取得したいと考えています(product_id 13 in product-method)。返されたリストは、その後、次のようになります。私は方法年代を抽出するために、このクエリを試み

SELECT method_id 
FROM `product-method` 
WHERE `product_id` = 13 
1を返し

、2及び10

welding 
stamping 
forging 

私はこのクエリで始まっの名前はから返されます。method_id

SELECT name 
FROM `product-method` 
WHERE id = (SELECT method_id FROM `product-method` WHERE product_id = 13) 

これは何も返しません。

どのようなクエリを使用しますか?

SELECT name 
FROM method 
WHERE id IN 
    (SELECT method_id FROM product_method WHERE product_id = 13 
) 

それはproduct_methodテーブルから与えられたproduct_idに適用可能なmethod_idsを取得し、WHERE句でINを用いる方法テーブルから、メソッドの名前を検索します。

+0

JOINについてご覧ください。また、テーブル/カラムの識別子に ' - 'を使用しないでください – Strawberry

答えて

0

はこれを試してみてください。あなたがに追加することができ、もちろん異なる値のみ

select distinct m.name from method m, product_method pm 
where pm.product_id=13 and pm.method_id=m.id 

をしたい場合は

Select m.* 
From method m join product_method pm 
On m.id = pm.method_id 
Where pm.product_id = 13; 
+0

ありがとうございます! JOINメソッドは魅力的に機能しました。 – Taemera

-1

別の可能性

select m.name from method m, product_method pm 
where pm.product_id=13 and pm.method_id=m.id 

また、あなたはこのようにJOINを使用することができますメソッドのフィールドリストをフィールドリストに追加し、IDや名前などで並べ替えます。

+0

私たちは、1992年にこのように質問を書こうとしたことはほとんどやめました.21世紀に入ってください。 – Strawberry

+0

あなたはラッキーです...... – Massimo