【问题标题】:How to make SQL Query with Two Different Table如何使用两个不同的表进行 SQL 查询
【发布时间】: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 语法,当您忘记了表的连接条件时,它会变得更加明显。

标签: mysql sql


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用相同的查询,但根据h.team_namea.team_name 测试团队名称。

    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
    JOIN teams h ON h.team_id=m.home_team_id
    JOIN teams a ON a.team_id=m.away_team_id
    WHERE 'Real Madrid' IN (h.team_name, a.team_name) and m.league_id = 1;
    

    【讨论】:

    • 感谢 Barmar,它有效。对于 League_id 也在比赛和球队表中。我没有提到所以你的答案工作得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-31
    • 2013-07-19
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多