2015-04-01 82 views
0

我有一个产品表,标签表和链接在一起的表,ProductTagsMySQL的许多一对多SELECT查询

产品

ID 

ProductTags

ProductID 
TagID 

标签

ID 

我想查询ProductTags表为所有ProductIDs表都有TagID 1和2.我该怎么做?

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

这显然不会工作...不能完全让我的头圆如何做到这一点!

任何帮助非常感谢!

+0

如果您创建[SQLFiddle](http://sqlfiddle.com/),您可能会增加获得答案的机会。让人们很容易回答你的问题。 – kkuilla 2015-04-01 13:00:19

回答

1

这是一个“设置中集”查询和我喜欢用group byhaving解决这些。以下是一种方法:

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

这工作完美。我不知道在哪里,“很好”!谢谢 – Lee 2015-04-01 12:08:02

0

您需要通过使用组,并具有针对这种情况

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 
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 
0

试试这个:

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