仅在多行或同一ID上匹配的SQLite查询

时间:2019-01-10 17:57:47

标签: sql select sqlite

我有一个使用文本标签标记文件的系统。每个文件都有几个标签。相关的表/列为:

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中定义的documenttags,则返回404ba9,因为(404ba9,1)和(404ba9,2)同时存在taggings

1 个答案:

答案 0 :(得分:3)

我要加入表格,对标签有条件,并计算匹配数:

SELECT   fileHash
FROM     taggings 
JOIN     tags ON taggings.tagId = tags.tagId
WHERE    tagText IN ('text1', 'text2')
GROUP BY fileHash
HAVING   COUNT(*) = 2