Java MySQL |从多对多分组中检索匹配

时间:2017-01-22 04:54:46

标签: java mysql many-to-many

考虑MySQL中的三个表:

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-method 中的 product_id 13)。返回的列表应为:

welding  
stamping  
forging 

我从这个问题开始:

SELECT method_id  
FROM `product-method`  
WHERE `product_id` = 13 

返回1,2和10

我尝试使用此查询从返回的 method_id 中提取方法名称

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

不返回任何内容。

我应该使用什么查询?

2 个答案:

答案 0 :(得分:0)

试试这个:

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

它从product_method表中获取给定product_id的适用method_ids,然后使用IN子句中的WHERE从方法表中查找方法的名称。

或者,您可以像这样使用JOIN:

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

答案 1 :(得分:-1)

另一种可能性

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

如果您只想要不同的值

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

当然你可以在方法列表中添加更多来自方法的字段,按id或名称排序等等。