2011-09-29 49 views
4

我有一个在它连接与关联标签项数据如下表:MySQL查询中集

entry_id | tag_id 
1  | 1 
2  | 1 
3  | 1 
1  | 2 
2  | 2 

我想写仅返回标记为1和2项作为查询条件,这个示例条目1和2将被返回,而3不会,因为它没有两个标签。目前的查询我使用的作品,但我知道不可能是正确的:

SELECT entry_id, GROUP_CONCAT(DISTINCT tag_id ORDER BY tag_id) 
FROM tags 
GROUP BY entry_id 
HAVING GROUP_CONCAT(DISTINCT tag_id ORDER BY tag_id) LIKE "%1,2%"; 

回答

2

如果(entry_id,TAG_ID)是独一无二的:

SELECT entry_id 
FROM yourtable 
WHERE tag_id IN (1, 2) 
GROUP BY entry_id 
HAVING COUNT(*) = 2 

另一种方法,它不需要唯一性和可也更快:

SELECT T1.entry_id 
FROM yourtable T1 
JOIN yourtable T2 
ON T1.entry_id = T2.entry_id 
AND T1.tag_id = 1 
WHERE T2.tag_id = 2 
+0

我喜欢你建议的第一个查询,它很简单和完美。非常感谢。 –

1
SELECT entry_id 
FROM tags t1 inner join tags t2 
on (t1.entry_id = t2.entry_id and t1.tag_id = 1 and t2.tag_id = 2) 
0

这是自加入...

一个很好的例子
SELECT tagged1.entry_id 
FROM tags tagged1 
JOIN tags tagged2 
    ON tagged1.entry_id = tagged2.entry_id 
     AND tagged1.tag_id = 1 
     AND tagged2.tag_id = 2; 
+0

同样的答案已经发布:) –

+0

你们对我来说总是太快了!为你的答案+1了。 –