两个查询倍数列的汇总结果

Summary result of two query multiples columns

我有这个table:

团队:

--------------
id....teamname....id_league
----------------------------
1.....team1...........2
----------------------------
2.....team2...........2
----------------------------
3.....team3...........2
----------------------------
4.....team4...........2
----------------------------

和这个 table: 结果:

----------------------------------------------------
id.....id_home.....id_away.....res_home.....res_away
----------------------------------------------------
1..........1..........2..........0.............4
----------------------------------------------------
2..........3..........4..........1.............2
----------------------------------------------------
3..........3..........2..........3.............4
----------------------------------------------------
4..........4..........1..........1.............2
----------------------------------------------------

我有这个查询:

SELECT
    teams.id,
    teams.teamname,
    SUM(res_home) AS r1,
    SUM(res_away) AS r2
FROM
    results
    INNER JOIN teams ON results.id_home = teams.id
WHERE
    teams.id_league = 2
GROUP BY
    teams.id

结果是:

--------------------------------------------
teamid...teamname........r1...............r2
--------------------------------------------
1.........team1...........0................4
--------------------------------------------
2.........team2...........0................0
--------------------------------------------
3.........team3...........4................6
--------------------------------------------
4.........team4...........1................2
--------------------------------------------

我有这个查询:

SELECT
    teams.id,
    teams.teamname,
    SUM(res_away) AS r1,
    SUM(res_home) AS r2
FROM
    results
    INNER JOIN teams ON results.id_away = teams.id
WHERE
    teams.id_league = 2
GROUP BY
    teams.id

结果是:

--------------------------------------------
teamid...teamname........r1...............r2
--------------------------------------------
1.........team1...........2................1
--------------------------------------------
2.........team2...........4................0
--------------------------------------------
3.........team3...........0................0
--------------------------------------------
4.........team4...........2................1
--------------------------------------------

现在我想获得两者的并集。我想要这个结果:

--------------------------------------------
teamid...teamname........r1...............r2
--------------------------------------------
1.........team1...........2................5
--------------------------------------------
2.........team2...........4................0
--------------------------------------------
3.........team3...........4................6
--------------------------------------------
4.........team4...........3................3
--------------------------------------------

非常感谢。

一种方法是在加入之前取消旋转:

SELECT t.id, t.teamname, SUM(res) AS r1, SUM(opponent) AS r2
FROM teams t JOIN
     ((SELECT r.id_home as team_id, res_home as res, res_away as opponent
       FROM results r
      ) UNION ALL
      (SELECT r.id_away as team_id, res_away as res, res_home as opponent
       FROM results r
      )
     ) r
     ON r.team_id = t.id 
WHERE t.id_league = 2
GROUP BY t.id

另一种方式是两个合并两个连接条件:

SELECT
    teams.id,
    teams.teamname,
    SUM(case results.id_home when teams.id then res_home else res_away end) AS r1,
    SUM(case results.id_home when teams.id then res_away else res_home end) AS r2
FROM
    results
    INNER JOIN teams ON teams.id IN (results.id_away,results.id_home)
WHERE
    teams.id_league = 2
GROUP BY
    teams.id
    , teams.teamname