gpt4 book ai didi

sqlite - 高级SQLite查询多对多关系

转载 作者:行者123 更新时间:2023-12-03 19:42:59 25 4
gpt4 key购买 nike

我想知道实现此目标的最有效方法,因为最近在很短的时间内,我以几种不同的表现形式遇到了这个问题。

作为一个一般示例,假设我们有一个博客,其中包含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)任意生成该表达式,缺点是我a不安地认为“ n”个嵌套查询并不是最优雅的解决方案。

最佳答案

使用子查询非常好;如果Post.IDPostTags.TagID是索引键或主键,它们将非常有效。

但是,您不需要太多的嵌套:

SELECT *
FROM Post
WHERE ID IN (SELECT PostID FROM PostTags WHERE TagID = 'asd')
AND ID NOT IN (SELECT PostID FROM PostTags WHERE TagID = 'fgh')

关于sqlite - 高级SQLite查询多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26524636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com