我有以下表格
goal matches team_match
id | match_id | team_id | name match_id team_id | match_id | home_away
----------------------------- ----- ------------------------------
1 1 1 Ronaldo 1 1 1 home
2 1 2 Messi 2 1 away
3 1 2 Suarez 2 1 away
现在我想得到那些在客场球队打球的球员。
SELECT DISTINCT g.name
FROM goal g
INNER JOIN matches m
ON g.match_id = m.match_id
INNER JOIN team_match tm
ON tm.match_id = m.match_id
AND tm.home_away = 'away'
WHERE m.match_id = '1'
但不是:
Messi
Suarez
我得到了:
Ronaldo
Messi
Suarez
它的接缝就像我的第二个INNER JOIN被完全忽略,即使我从“home”变为“away”我也会得到相同的结果。
答案 0 :(得分:4)
INNER JOIN
正常运作。似乎您的数据库架构是问题。
为什么不应该Ronaldo
在结果集中?你不能在任何地方使用team_id
。在指定的匹配中,Ronaldo
团队中没有home
的信息。
建议更好的架构:
Table teams
team_id
1
2
Table players:
playerid team_id name
1 1 Ronaldo
2 2 Messi
3 2 Suarez
Table matches
matchid hometeamid awayteamid
1 1 2
Table goals
matchid playerid
1 1
1 2
1 3
然后您的查询可能如下所示
SELECT p.Name FROM players p
INNER JOIN goals g ON (g.playerid = p.playerid)
INNER JOIN matches m ON (m.matchid = g.matchid AND m.awayteamid = p.team_id)
WHERE m.matchid = 1
答案 1 :(得分:0)
您还没有证明第一个内部联接正在发挥作用。 尝试删除空行