【发布时间】:2013-11-20 06:37:11
【问题描述】:
考虑具有 POSTS 和 TAGS 的博客的典型场景。
我需要在给定的 TAGS 列表中找到所有没有 TAGS 的 POST。
这意味着没有任何列出的标签的帖子被选中。或者,反过来说,具有列表中任何标签的帖子都不会被选中。
我将如何构造一个合适的查询来做到这一点?
就本示例而言,查询应与具有 POSTS 表、TAGS 表和 POSTS_TAGS 表的 SQLITE3 数据库一起使用,以便查询
select p.title, t.name from posts p
inner join posts_tags pt on pt.post_id = p.id
inner join tags t on t.id = pt.tag_id
返回加入其标签的所有帖子(具有多个标签的帖子被多次列出)。
我认为答案在于获取帖子的所有标签,因此我尝试使用group_concat 将其减少到每个带有所有标签的帖子的一行,但无法使其正常工作。这是我尝试过的:
select p.title, t.name, group_concat(t.name) from posts p
inner join posts_tags pt on pt.post_id = p.id
inner join tags t on t.id = pt.tag_id;
但是这会返回一行作为所有帖子的所有标签的最后一篇帖子。下一步是排除标记包含任何已排除标记的行。
我会继续尝试解决这个问题,但如果有人能提出一个查询来返回所有没有任何指定标签的帖子,那将非常有帮助。
【问题讨论】:
标签: sqlite