开发者社区> 问答> 正文

从三个表的多路联接中高效过滤出重复项

已解决

我有三个表,它们具有许多:许多关系,如下所示:

Tags {TagID, ThemeID, TagStuff} Theme {ThemeID, Themestuff} UserTags {UserID, TagID}

给定一个特定的UserID,我试图检索那些标签的关联主题记录,并保留一个相关的TagID值,作为我如何获取该主题记录的参考。

我开始的简单方法是:

SELECT a.TagID, c.ThemeID, c. Themestuff FROM UserTags a, Tags b, Theme c 
    WHERE a.UserID = 'Fred' AND a.TagID = b.TagID AND b.ThemeID = c.ThemeID

麻烦的是,如果Fred在一周的过程中使用不同的标签访问它们,那么我将获得多次包含相同主题记录的Fred结果:

TagID1, ThemeID2, Themestuff2 TagID7, ThemeID2, Themestuff2

我只想查看一个匹配的主题记录,并且不在乎将哪个TagID映射到它。我尝试使用DISTINCT对嵌套子查询进行过滤,结果很快变成一团糟,但仍然不太正确。我觉得我必须缺少一个简单的解决方案。将不胜感激...

展开
收起
保持可爱mmm 2019-12-13 10:29:03 283 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    如果您不想重复主题,那么我建议exists:

    select th.* from themes th where exists (select 1 from tags t join usertags ut on tu.tagid = t.tagid where t.themeid = th.themeid and u.userid = 'Fred' );

    问题来源于stack overflow

    2019-12-13 10:29:28
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
RowKey与索引设计:技巧与案例分析 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载