Java MySQL |从多对多分组检索匹配项
考虑MySQL中的三个表:Java MySQL |从多对多分组检索匹配项,java,mysql,many-to-many,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 6
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 Inproduct method)。然后,返回的列表应为:
welding
stamping
forging
我从这个问题开始:
SELECT method_id
FROM `product-method`
WHERE `product_id` = 13
返回1,2和10
我尝试此查询以从返回的方法\u id中提取方法的名称:
它什么也不返回
我应该使用什么查询?试试这个:
SELECT name
FROM method
WHERE id IN
(SELECT method_id FROM product_method WHERE product_id = 13
)
它从product_method table中获取给定product_id的适用方法_id,然后使用WHERE
子句中的IN
从方法表中查找方法的名称
或者,您可以像这样使用连接:
Select m.*
From method m join product_method pm
On m.id = pm.method_id
Where pm.product_id = 13;
另一种可能性
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或名称排序,等等。请参阅关于联接。不要在表/列标识符中使用“-”,我们早在1992年就基本上停止了以这种方式编写查询。加入21世纪吧
select distinct m.name from method m, product_method pm
where pm.product_id=13 and pm.method_id=m.id