Regrouper les CTE
Maintenant que vous avez créé les deux sous-requêtes identifiant les équipes à domicile et à l’extérieur, il est temps de réorganiser votre requête avec les sous-requêtes home
et away
en tant qu’expressions de table communes. Vous remarquerez que la requête principale comprend l’expression SELECT DISTINCT
. Si vous n'identifiez pas uniquement les matchs DISTINCT
, vous risquez de renvoyer un enregistrement en double pour chaque match joué.
Poursuivez l’élaboration de la requête pour extraire tous les matchs joués par Manchester United au cours de la saison 2014/2015.
Cet exercice fait partie du cours
Manipulation de données en SQL
Instructions
- Déclarez les CTE
home
etaway
avant votre requête principale. - Reliez vos CTE à la table des matchs à l’aide d’un
LEFT JOIN
. - Sélectionnez les données pertinentes des CTE dans la requête principale.
- Sélectionnez la date à partir de
match
, les noms des équipes à partir des CTE et les buts à domicile/à l’extérieur à partir dematch
dans la requête principale.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
-- Set up the home team CTE
___ ___ ___ (
SELECT m.id, t.team_long_name,
CASE WHEN m.home_goal > m.away_goal THEN 'MU Win'
WHEN m.home_goal < m.away_goal THEN 'MU Loss'
ELSE 'Tie' END AS outcome
FROM match AS m
LEFT JOIN team AS t ON m.hometeam_id = t.team_api_id),
-- Set up the away team CTE
___ ___ (
SELECT m.id, t.team_long_name,
CASE WHEN m.home_goal > m.away_goal THEN 'MU Loss'
WHEN m.home_goal < m.away_goal THEN 'MU Win'
ELSE 'Tie' END AS outcome
FROM match AS m
LEFT JOIN team AS t ON m.awayteam_id = t.team_api_id)
-- Select team names, the date and goals
SELECT DISTINCT
___,
___.___ AS home_team,
___.___ AS away_team,
___,
m.away_goal
-- Join the CTEs onto the match table
FROM match AS m
___ JOIN ___ ON m.id = ___
___ JOIN ___ ON m.id = ___
WHERE m.season = '2014/2015'
AND (home.team_long_name = 'Manchester United'
OR away.team_long_name = 'Manchester United');