2011-02-04 30 views
2

我有如下表:MySQL的反对multple值匹配

nid | tag_id 
-------------- 
1 | 213 
1 | 78 
2 | 938 
2 | 1002 
2 | 8573 
2 | 5 
3 | 3957 
3 | 487 
4 | 56 

我想中检索,其中TAG_ID匹配多个值说1002,938,8573一个NID。

我开始用下面的查询:

SELECT nid,GROUP_CONCAT(DISTINCT tag_id ORDER BY tag_id) tag_ids FROM table GROUP BY nid 

返回:

nid | tag_ids 
-------------- 
1 | 78,213 
2 | 5,938,1002,8573 
3 | 487,3957 
4 | 56 

但我还没有发现任何东西那将让我再次我一套符合tag_ids列值。我需要它匹配所有的不只是任何价值观。

也许我的做法是错误的,很高兴看到不同的方法。

任何输入非常赞赏。

感谢 史蒂夫

回答

7

假设你正在构建查询在某种应用程序代码,您可以使用

SELECT nid 
FROM table 
WHERE tag_id IN (tag1, tag2, tag3, ...) 
GROUP BY nid 
HAVING COUNT(*) = n; 

其中n是在列表标签​​的数量。这应该找到与您的整个标签列表相匹配的所有nid。

1

也许HAVING条款会给你想要的东西。

+0

我不太清楚我可以如何使用having子句来匹配几个值。你能给我一个例如吗? – 2011-02-04 10:56:28

+0

HAVING X OR Y OR Z,maybe .... – duffymo 2011-02-04 11:10:11