0

我正在编写一个曲棍球统计数据库。我正在尝试计算玩家的总分。总分是 1st_assists、2nd_assists 和goals_for 表的总和。最初,当我填满表格时,下面的代码可以工作(即每个玩家至少有一次第一次助攻)。现在我只有一场比赛,结果集不包括目标信息,因为有助攻的球员没有进球。
我需要完整的外部连接功能,并且我已经读过这在 MySQL 中不可用。不过,我也读过,可以通过左连接和右连接的联合来模拟完全输出连接。鉴于这个查询已经很复杂,我无法弄清楚如何去做。这是查询:

select p.player_first_name, p.player_last_name, count1, count2, (count1+ifnull(count2,0)) as total_count
from
(select player_id, count(*) count1
from(select * from 1st_assists
union
select * from 2nd_assists) as tem
join players on tem.fk_player_id=players.player_id
group by fk_player_id
order by count(*) desc) q1
left join
(select player_id, count(*) count2
from goals_for
join shots_for on goals_for.fk_shot_for_id=shots_for.shot_for_id
join players on shots_for.fk_player_id=players.player_id
group by player_id) q2
ON q1.player_id=q2.player_id
left join players p ON q1.player_id=p.player_id
order by (count1+count2) desc;

结果如下:

player_first_name   player_last_name    count1  count2  total_count
Ray                 Bourque                 1   NULL    1
Dany                Heatley                 1   NULL    1
Mike                Bossy                   1   NULL    1

本场比赛还有另外 3 名球员得分,没有出现在上述结果中。如何模拟我需要的完整外部联接?这就是我需要的,不是吗?

以下是表格详细信息和所需结果:

1st_assists:
    1st_assist_id
    fk_goal_for_id
    fk_player_id

2nd_assists:
    2nd_assist_id
    fk_goal_for_id
    fk_player_id

goals_for:
    goal_for_id
    fk_shot_for_id
    game_winner
    time

shots_for:
    shot_for_id
    fk_game_id
    fk_player_id

players:
    player_id
    player_first_name
    player_last_name



desired query results
player_first_name   player_last_name    count1  count2  total_count
Ray                 Bourque                 1   NULL    1
Dany                Heatley                 1   NULL    1
Mike                Bossy                   1   NULL    1
Wayne               Gretzky              NULL      1    1
Paul                Coffey               NULL      1    1
Bobby               Orr                  NULL      1    1

我真的只对total_count 值感兴趣,它是1st_assists、2nd_assists 和goals_for 的总和。此查询仅基于第一个游戏。会有很多比赛。

4

0 回答 0