当前位置: 首页 > 面试题库 >

从联接表过滤

闻人博
2023-03-14
问题内容

我在使用棘手的SQL查询时遇到了一些麻烦。

在我的MySQL数据库中,有表主题,标签和tags_topics可以将它们连接起来。我想获取共享相同指定标签的主题。例如,假设我有3个ID为1、2和3的标签,我想获取所有与标签1、2和3相关联的主题。主题可以具有其他标签,但必须具有所有指定的标签。

帮我思考一下plz xD

编辑:在以下问题中找到了使用GROUP
BY的解决方案:仅获取与联接表(SQL)中所有条目匹配的行 如果有人有更优雅的解决方案,请发表:)


问题答案:

JOIN 解决方案:

SELECT t.*
FROM topics t
 JOIN tags_topics t1 ON (t.id = t1.topicId AND t1.tagId = 1)
 JOIN tags_topics t2 ON (t.id = t2.topicId AND t2.tagId = 2)
 JOIN tags_topics t3 ON (t.id = t3.topicId AND t3.tagId = 3)

GROUP BY 解决方案:

请注意,除非使用MySQL或SQLite,否则您需要列出子句中的所有t.*GROUP BY

SELECT t.*
FROM topics t JOIN tags_topics tt 
  ON (t.id = tt.topicId AND tt.tagId IN (1,2,3))
GROUP BY t.id, ...
HAVING COUNT(*) = 3;

子查询解决方案:

SELECT t.*
FROM topics t
WHERE t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 1)
  AND t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 2)
  AND t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 3);

修改后的GROUP BY解决方案:

GROUP BY通过隔离子查询中的搜索来简化子句。

SELECT t.*
FROM topics t
WHERE t.id IN (
  SELECT tt.topicId FROM tags_topics tt 
  WHERE tt.tagId IN (1,2,3))
  GROUP BY tt.id HAVING COUNT(*) = 3
);


 类似资料:
  • 问题内容: 我试图根据另一个数据库的选择标准从一个数据库中删除记录。我们有两个表,emailNotification,用于存储作业和电子邮件列表。然后我们有工作。我想清除已关闭作业的emailNotifications。我在Stackoverflow上找到了一些较早的示例,这些示例将我带到了这种语法类型(我以前曾尝试在where之前进行连接)。 我收到错误消息,您无法在FROM子句中指定目标表’e

  • 问题内容: 我有一个Delphi应用程序,其中显示了像这样的查询已玩过的游戏的列表: 当我单击DBNavigator中的删除按钮时,也会删除game_types表中的联接记录。这是一个问题,因为许多其他游戏可以是同一类型。 我需要做些什么才能删除游戏,而不删除游戏类型? 问题答案: 您需要使用“唯一表”动态属性 从MSDN ADO文档 如果设置了“唯一表”动态属性,并且Recordset是对多个表

  • 问题内容: 这是我的桌子: 每篇文章可以具有一个或多个与之关联的图像。我想在页面上显示最后40篇书面文章,以及与该文章相关的最新图像。我不知道的是如何与article_images表联接,并且仅检索单个行。 编辑:解决方案必须表现良好,这一点很重要。到目前为止,我所看到的解决方案(使用派生表)需要一分钟或更长时间才能完成。 问题答案: 在查看了其他答案之后,它帮助我意识到了一个潜在的问题。 Art

  • 问题内容: 我有三个表:R,S和P。 表R通过外键与S连接;有 应该 是S中至少一个的记录,所以我可以加入: 如果S中没有记录,那么我没有行,那很好。 然后表S与P联接,其中记录为P可能存在,也可能不存在,并与S联接。 所以我做 如果我想将第二个JOIN绑定到S而不是R,例如我可以使用括号,该怎么办: 还是这已经是R,S和P之间笛卡尔积的自然行为? 问题答案: 各种外部联接和普通联接都在相同的优先

  • 问题内容: 我对SQL和JPQL的了解不是很好,我一直在尝试创建以下sql语句的JPQL查询: 编辑:糟糕,我忘记了按用户ID将搜索添加到查询中。我想获取用户所属的所有组。 但是我只是语法不正确。任何帮助将不胜感激。 相关代码段: Group.java User.java 问题答案: 使用JPQL,它将是: 这里是您的EntityManager,是要为其加载组列表的User类的实例。如果只有用户标

  • 问题内容: 我不是数据库专家,所以我需要一些有关正在处理的查询的帮助。在我的照片社区项目中,我不仅要显示标签名称和计数器(标签中的图像数量),而且还想显示标签中最受欢迎的图像(最因果),以丰富标签的可视化效果。 表设置如下: 图像表包含基本图像元数据,重要的是因果字段 Imagefile表每个图像包含多个条目,每种格式一个 标签表保存标签定义 Tag_map表将标签映射到图像 在我通常的试验和错误