【发布时间】:2014-10-23 18:29:35
【问题描述】:
我想知道实现这一点的最有效方法,因为我最近在令人惊讶的短时间内以几种不同的表现形式遇到了这个问题。
作为一般示例,假设我们有一个包含 Post 对象、Tag 对象的博客,并且它们形成了多对多的关系,因为很明显,每个帖子都有许多标签,而标签又可以与许多标签相关联帖子。
现在解决实际问题:我如何最佳地查询所有关联标签列表符合给定条件的帖子?
我的一个相当幼稚的搜索解决方案(“包含 asd 但不包含 fgh”)看起来或多或少像这样:
SELECT * FROM Post INNER JOIN (
SELECT DISTINCT PostID FROM PostTags WHERE (
PostID IN (SELECT PostID FROM PostTags WHERE TagID = 'asd')
AND
PostID NOT IN (SELECT PostID FROM PostTags WHERE TagID = 'fgh')
)
) Results ON Post.ID = Result.PostID
优点是我可以为我给出的任何逻辑表达式(AST)或多或少任意生成它,缺点是我有一种烦人的感觉,即“n”个嵌套查询几乎不是最优雅的解决方案。
【问题讨论】:
标签: sqlite many-to-many boolean-logic