我有一个使用文本标签标记文件的系统。每个文件都有几个标签。相关的表/列为:
taggings(fileHash,tagId)
tags(tagId,tagText)
如何找到所有同时具有tagText与查询1匹配的行和与之匹配查询2的另一行的所有tagId?换句话说,当标签位于如上所示的单独行中时,如何查找同时具有两个标签的每个fileHash?
有没有办法针对任意数量的比赛?
我发现this似乎相关,但是当我尝试编写这样的查询时,出现了“无法准备声明”错误。
fileHash tagId
404ba9 1
404ba9 2
e04f90 1
e04f90 3
tagId tagText
1 document
2 personal
3 work
如果用户同时搜索personal
中定义的document
和tags
,则返回404ba9
,因为(404ba9,1)和(404ba9,2)同时存在taggings
。
答案 0 :(得分:3)
我要加入表格,对标签有条件,并计算匹配数:
SELECT fileHash
FROM taggings
JOIN tags ON taggings.tagId = tags.tagId
WHERE tagText IN ('text1', 'text2')
GROUP BY fileHash
HAVING COUNT(*) = 2