SELECT
CONCAT(master.namefirst," ", master.namelast) AS name,
awards.yearID AS year,
awards.awardID AS award,
awards.pointsWon AS points,
fielding.stint AS stint,
SUM(fielding.G) AS games_played
FROM
AwardsSharePlayers AS awards
INNER JOIN
Master
ON awards.playerID = master.playerID
INNER JOIN
Fielding
ON awards.playerID = fielding.playerID
AND awards.yearID = fielding.yearID
INNER JOIN
Teams
ON fielding.teamID = teams.teamID
AND awards.yearID = teams.yearID
WHERE AwardID IN ('MVP', 'Cy Young')
GROUP BY
CONCAT(master.namefirst," ", master.namelast),
awards.yearID,
awards.awardID,
awards.pointsWon,
fielding.stint
ORDER BY
year,
award,
points DESC,
stint
;
I added in team order and games played to account for players traded during the season. The SUM and GROUP BY accounts for the multiple records you would get back due to players fielding multiple positions. If you do not want Games Played you could omit the field and the group by and instead use a DISTINCT clause to account for the duplicates. I agree with John that I think the 'fielding' table works best for the link for linking players to teams. It accounts for DH, where I'm not sure how well the 'batting' table accounts for pitchers who have no plate appearances. Also, it often useful to be able to get their position, games, and starts for many queries.