选择与一组其他行相关的行

时间:2010-03-06 11:27:28

标签: sql sqlite

让我们说,我有两个表,“实体”和“标签”。它们之间的关系由第三个表“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>)

1 个答案:

答案 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

还要查看here以获取有关SQLite的帮助,并在this页面搜索“有”