问题描述
我有一个包含 features
和 document
列的 sqlite 表 feature
。
没有一列是UNIQUE
,这是我可以做的
SELECT feature FROM features WHERE document=121;
SELECT document FROM features WHERE feature=11;
获取所有具有特征 11 的文档。
现在我想问布尔检索问题,例如:
给我所有具有特征 11、15、143、1222、2001 的文档。
查询的特征列表的长度是变化的。
当然我在两列上有一个索引。
我认为使用 INTERSECT
关键字,它会查询每个特征的整个表,而不是理解布尔 AND 并通过迄今为止具有所有特征的文档重复过滤 document
列。
解决方法
首先为 feature
列创建一个索引,以便在过滤表以获取所需功能时使用它:
CREATE INDEX idx_feature ON features(feature);
然后像这样使用聚合:
SELECT document
FROM features
WHERE feature IN (11,15,143,1222,2001)
GROUP BY document
HAVING COUNT(*) = 5; // the number of features that you want
HAVING
子句中的条件确保返回的 document
包含全部 5 个 feature
。