私はホッケー統計データベースを書いています。プレイヤーの合計ポイントを計算しようとしています。合計ポイントは、1st_assists、2nd_assists、goals_for テーブルの合計です。もともと、テーブルが完全に入力されていたときに、以下のコードが機能していました (つまり、すべてのプレーヤーに少なくとも 1 つの最初のアシストがありました)。今は 1 つのゲームしかないので、結果セットには goal_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
私が本当に関心があるのは、1st_assists、2nd_assists、goals_for の合計である total_count 値だけです。このクエリは、最初のゲームのみに基づいています。多くのゲームがあるでしょう。