如何使用两个不同的表进行 SQL 查询

分享于2022年07月17日 mysql sql 问答
【问题标题】:如何使用两个不同的表进行 SQL 查询(How to make SQL Query with Two Different Table)
【发布时间】: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;

我想在同一查询中查看一支球队的主客场比赛结果。

我的表格是:(比赛和球队)

匹配 表格列是; ma​​tch_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 语法,当您忘记了表的连接条件时,它会变得更加明显。

【解决方案1】:

您必须将两个表与团队表和比赛表连接起来。使用 OR 参数而不是 AND。