【问题标题】:SQLite query matching only on multiple rows or the same IDSQLite 查询仅在多行或相同 ID 上匹配
【发布时间】:2019-01-10 17:57:47
【问题描述】:

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

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

预期结果

如果用户同时搜索tags 中定义的personaldocument,则返回404ba9,因为taggings 中同时存在(404ba9, 1) 和(404ba9,2)。

【问题讨论】:

  • 请提供样本数据和预期结果。几行将有很长的路要走。
  • 我的问题已得到解答,但我为将来遇到此帖子的任何人添加了示例数据和预期结果。

标签: sql select sqlite


【解决方案1】:

我会加入表格,对标签设置条件,并计算匹配的数量:

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

【讨论】:

  • 谢谢,效果很好。我很少使用 SQL,以至于直到现在我才不得不使用 HAVING。
猜你喜欢
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多