2011-09-29 79 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了。 –