Hy everyone,在mysql中的复杂连接查询
我真的需要你的帮助。我必须获得以下所有用户的列表(不同): - 在比赛中进行现场签到(checkins.ctype ='live') - 他们最喜欢的球队(参见fanusers_teams) - 赢得3个或更多目标区别。
最喜欢的团队,可能是info_matches.team_id1或info_matches.team_id2或甚至两者。
下面是相关表小设计:
什么我试过,效果80%(所以它不会:(),因为它会返回一些用户正确的(他们最爱。团队3 +目标差异),但也返回用户在这种情况下没有一个团队。我认为他们返回,因为他们已经为一个团队或其他团队赢得了3球以上的差异
这是我的查询:
SELECT DISTINCT f.id FROM fanusers f LEFT JOIN checkins c ON f.id = c.fanuser_id LEFT JOIN info_matches m ON m.id = c.match_id WHERE c.ctype = 'live' AND ( m.team_id1 IN( SELECT DISTINCT m1.team_id1 FROM info_matches m1 RIGHT JOIN fanusers_teams ft ON m1.team_id1 = ft.team_id RIGHT JOIN fanusers f ON f.id = ft.fanuser_id WHERE m1.pointsteam1 - m1.pointsteam2 >= 3 ) OR m.team_id2 IN( SELECT DISTINCT m2.team_id2 FROM info_matches m2 RIGHT JOIN fanusers_teams ft ON m2.team_id2 = ft.team_id RIGHT JOIN fanusers f ON f.id = ft.fanuser_id WHERE m2.pointsteam2 - m2.pointsteam1 >= 3 ) )
如果有人成功解决了这个问题,我也会很感激一个关于我做错了什么的小解释。
谢谢。
跳到我身上的是左派加入你从粉丝用户到签到;你绝对不希望这样,因为你*只需要*已经登记游戏的用户。我会在你的分析中开始,看看有没有其他的OUTER连接应该是INNER。 – coyotesqrl