选择涉及多对多表

时间:2013-10-23 21:58:43

标签: mysql sql many-to-many

我有3个表:产品,功能和链接表(多对多) 例如,我需要从链接表中获取所有产品,这些产品具有3个功能,id = 1,2和3

   link_id | product_id | feature_id
   ---------------------------------
   100     | 1          | 1
   101     | 1          | 2
   102     | 1          | 3

伙计们,编写查询的最简单方法是什么?

SELECT pr.* FROM product pr, link lk WHERE pr.id = lk.product_id 
AND lk.feature_id = 1 AND lk.feature_id = 2 AND lk.feature_id = 3 

不起作用

2 个答案:

答案 0 :(得分:0)

当您检查三个不同记录的值时,您无法在所有记录上全部检查它们。

制作三个连接,一个是每个功能的链接记录:

select
  pr.*
from
  product pr
  inner join link lk1 on pr.id = lk1.product_id and lk1.feature_id = 1
  inner join link lk2 on pr.id = lk2.product_id and lk2.feature_id = 2
  inner join link lk3 on pr.id = lk3.product_id and lk3.feature_id = 3

答案 1 :(得分:0)

这样做:

SELECT pr.* FROM product pr, link lk 
WHERE pr.id = lk.product_id 
AND lk.feature_id IN ( 1, 2, 3)
with ur;