【发布时间】:2022-01-23 10:18:12
【问题描述】:
我不能在这里解决同样的问题,所以我写它。
我需要一个 SQL 查询来获取以下详细信息; 我有两张桌子,第二张桌子有 team_id,第二张桌子有 home_team_id 和 away_team_id 以及主客场比分。
我已经可以按照以下查询分别进行主场和客场比赛了:
首页匹配查询:
SELECT Distinct m.week,m.match_date, h.team_name as Home, a.team_name as AWAY,m.home_score,m.away_score,m.league_id
FROM matches m,teams h,teams a, leagues l
WHERE h.team_id=m.home_team_id and a.team_id=m.away_team_id
and h.team_name ='Real Madrid' and m.league_id = 1;
客场匹配查询:
SELECT Distinct m.week,m.match_date, h.team_name as Home, a.team_name as AWAY,m.home_score,m.away_score,m.league_id
FROM matches m,teams h,teams a, leagues l
WHERE h.team_id=m.home_team_id and a.team_id=m.away_team_id
and a.team_name ='Real Madrid' and m.league_id = 1;
我想在同一查询中查看一支球队的主客场比赛结果。
我的表格是:(比赛和球队)
匹配 表格列是; match_id 比赛日期, home_team_id, away_team_id, home_score, away_score
团队 表格列是; team_id, 团队名称
我想看看下面的结果:
一个球队的主客场比分在一张桌子上
示例: 球队是皇家马德里
结果:
Home Team | Away Team | Home Score | Away Score |
---|---|---|---|
Real Madrid | Barcelona | 1 | 0 |
Real Madrid | Cadiz | 1 | 1 |
Real Madrid | A. Madrid | 2 | 2 |
Villareal | Real Madrid | 2 | 0 |
Valencia | Real Madrid | 1 | 3 |
-
为什么查询中有
league
表?你从不使用它。 -
我有不同的联赛,所以我可以这样过滤。联赛表只有league_id 和league_name 列。
-
但是您没有在查询中使用
l.league_name
。而且您没有league
表的加入条件,因此您正在创建一个包含所有联赛的交叉产品。 -
如果要使用
league
表,查询中需要l.league_id = m.league_id
。 -
如果您使用 ANSI JOIN 语法,当您忘记了表的连接条件时,它会变得更加明显。