我有一个带有3个联接的查询,我试图使用最后一个表中的ID来获取最初选择的表中的行数。该查询如下所示:
SELECT COUNT(*) FROM event INNER JOIN user ON event.user_id = user.id INNER JOIN membership ON membership.user_id = user.id INNER JOIN team ON team.id = membership.team_id WHERE event_type = 'S' AND team.id = 1;
因此,目标是使用来获取事件计数,team.id并且仅包括特定事件的计数team.id。我面临的问题是,user随着时间的流逝,a 可以在多个团队中使用,当前此查询返回的是通过成员关系与用户相关的所有团队的事件行的计数。例如,如果用户首先在team.id= 1 的团队中,然后在team.id= 2的另一个团队中,并且为每个团队创建了5个事件行,则上述查询当前返回的结果为,10而不是5。
也许我在想这个错误,但是有没有一种方法可以过滤查询,因此只team.id返回与= 1 相关联的行数?
谢谢!
您只需要先过滤,然后加入-
SELECT COUNT(*) FROM event INNER JOIN user ON event.user_id = user.id INNER JOIN (SELECT DISTINCT user_id, team_id FROM membership WHERE team_id = 1) M ON M.user_id = user.id INNER JOIN team ON team.id = M.team_id WHERE event_type = 'S' AND team.id = 1;
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。