我正在编写一个曲棍球统计数据库。我正在尝试计算玩家的总分。总分是 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 的总和。此查询仅基于第一个游戏。会有很多比赛。