开发者社区> 问答> 正文

联接后过滤SQL查询,同时从联接表中排除行

已解决

我有一个带有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 相关联的行数?

谢谢!

展开
收起
保持可爱mmm 2019-12-18 17:01:20 584 0
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

    2019-12-18 17:01:38
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载