2012-11-14 29 views
2

我无法解决以下问题。与多个列值匹配的SQL查询

鉴于以下表格结构和数据,我如何选择匹配两个标签的记录。例如:

+-----------------+------------------+ 
| collection_id |   tag  | 
+-----------------+------------------+ 
|  1  | advertising | 
|  1  |  tutorials | 
|  2  | advertising | 
|  2  |  coding  | 
+-----------------+------------------+ 

如果我搜索广告& &教程,它应该返回collection_id = 1,而不是collection_id = 2

任何指针深受欢迎。

+0

你想得到什么:scalar'collection_id'?或者可能有多个值? –

+0

标量'collection_id'。 – BenM

+0

我曾经有过类似的问题http://stackoverflow.com/questions/7492699/how-can-i-structure-a-query-to-give-me-only-the-rows-that-match-all -values-in-a在这种情况下,您将拥有一个csv的TAG列表。 – Gibron

回答

6
SELECT collection_ID 
FROM tableName 
WHERE tag IN ('advertising','tutorials') 
GROUP BY collection_ID 
HAVING COUNT(*) = 2 

如果标签没有被指定为每个collection_ID

SELECT collection_ID 
FROM tableName 
WHERE tag IN ('advertising','tutorials') 
GROUP BY collection_ID 
HAVING COUNT(DISTINCT tag) = 2 
约束
+0

感谢您的帮助。我复制了更多的数据,并且似乎查询没有像我期望的那样返回。请看这里http://sqlfiddle.com/#!2/021e8/3/0 – BenM

+0

不,你在标签上有多余的空格[见这里(*点击这里*)](http://sqlfiddle.com/ #!2/021e8/9) –

+0

哦,亲爱的,谢谢。我完全错过了。 – BenM