考虑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)
不返回任何内容。
我应该使用什么查询?
答案 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或名称排序等等。