我有下表:
nid | tag_id
--------------
1 | 213
1 | 78
2 | 938
2 | 1002
2 | 8573
2 | 5
3 | 3957
3 | 487
4 | 56
我想要检索一个nid,其中tag_id匹配多个值,例如1002,938,8573。
我开始使用以下查询:
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列与我的值集相匹配的内容。我需要它来匹配所有的价值观。
也许我的方法错了,很高兴看到不同的方法。
答案 0 :(得分:7)
假设您正在使用某种应用程序代码构建查询,可以使用
SELECT nid
FROM table
WHERE tag_id IN (tag1, tag2, tag3, ...)
GROUP BY nid
HAVING COUNT(*) = n;
其中n是列表中的标签数量。这应该找到与整个标签列表匹配的所有nids。
答案 1 :(得分:1)
也许一个HAVING子句会给你你想要的东西。