让我们说,我有两个表,“实体”和“标签”。它们之间的关系由第三个表“entity_tags”表示,它具有tho字段:entity_id和tag_id。我想选择按照它与给定标签集的相关性排序的所有实体。例如,有“banana”,“orange”,“potato”,“pen”和“car”作为实体,我想过滤所有与至少2个标签相关的实体“水果“,”有机“和”项目“。最好的方法是什么?
要记住的第一件事是使用像
这样的查询select entity.*
, count(*) as relevance
from entities
, tags
, entity_tags
where entities.id=entity_tags.entity_id
and tags.id=entity_tags.tag_id
and tags.name in ('fruit', 'organic', 'item')
group by entity.id
order by relevance
但是无法将and relevance > 1
添加到where
,sqlite会报告“滥用聚合”。
结果应如下所示:
1|banana|3
2|orange|3
3|potato|2
顺便说一句,是否有可能避免嵌套选择计算这些行?
select count(*)
from (<previous select>)
答案 0 :(得分:1)
试试这个(未经测试的)
select entity.*
, count(*) as relevance
from entities
, tags
, entity_tags
where entities.id=entity_tags.entity_id
and tags.id=entity_tags.tag_id
and tags.name in ('fruit', 'organic', 'item')
group by entity.id having count(entities.id) > 1
order by relevance