gpt4 book ai didi

sql - INNER JOIN 的条件给出了错误的结果

转载 作者:行者123 更新时间:2023-11-29 14:10:32 34 4
gpt4 key购买 nike

我有以下表格

      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”我也会得到相同的结果。

最佳答案

INNER JOIN 工作正常。看来您的数据库架构是问题所在。

为什么 Ronaldo 不应该出现在结果集中?您不会在任何地方使用 team_id。没有信息表明 Conaldo 在指定的比赛中参加了 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

关于sql - INNER JOIN 的条件给出了错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37392855/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com