MySQL多对多SELECT查询

时间:2015-04-01 11:53:55

标签: mysql

我有一个产品表,一个标签表和一个将它们链接在一起的表, ProductTags

产品

ID

ProductTags

ProductID
TagID

代码

ID

我想在ProductTags表中查询同时包含ProductIDs 1和2的所有TagID

SELECT *
From ProductTags
Where TagID = 1
    AND TagID = 2

这显然不会起作用......不能完全理解如何做到这一点!

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

这是" set-within-sets"查询,我想使用group byhaving来解决这些问题。这是一种方法:

SELECT ProductId
FROM ProductTags
WHERE TagID IN (1, 2)
GROUP BY ProductId
HAVING COUNT(DISTINCT TagId) = 2;

答案 1 :(得分:0)

你需要使用group by和for this case

select 
p.id
from product p
join producttags pt on pt.ProductID = p.id
join tags t on t.id = pt.tagid
where pt.tagid in (1,2)
group by p.id
having count(*) = 2 

答案 2 :(得分:0)

尝试两次加入ProductTags表。

SELECT t3 From ProductTags t1 join  ProductTags t2 on t1.productId=t2.productId join Product t3 Where t1.TagID = 1 AND t2.TagID = 2

答案 3 :(得分:0)

试试这个:

SELECT * From ProductTags
Where TagID = 1 OR TagID = 2