我有三个表,它们具有许多:许多关系,如下所示:
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对嵌套子查询进行过滤,结果很快变成一团糟,但仍然不太正确。我觉得我必须缺少一个简单的解决方案。将不胜感激...
如果您不想重复主题,那么我建议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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。