Highlights of Wednesday's Major League Baseball games:

Cardinals 7, Cubs 2

Michael Wacha snapped a personal streak of 10 straight starts without a win while the St. Louis Cardinals completed their first series sweep at Wrigley Field in 28 years by beating the Chicago Cubs 7-2 on Wednesday.

Wacha allowed two runs on three hits over 6 2/3 innings as he broke a personal seven-game losing streak that dated back to late April.

Cubs starter Jake Arrieta took the loss after a season-low-tying five-inning effort. He gave up two runs (one earned) on four hits while walking four and striking out six.

The Cardinals (38-33) won their third straight and claimed their first three-game sweep in Chicago since May 17-19, 1988. The Cubs (47-23) saw their losing streak reach three.

Wacha last won on April 23, when the Cardinals beat the Padres 11-2. A hard-luck streak of seven losses and three no-decisions followed.

Astros 3, Angels 2

Marwin Gonzalez's RBI triple in the eighth inning provided the go-ahead run to help the Astros complete a three-game sweep of Los Angeles.

Gonzalez plated George Springer with a 435-foot blast that put Houston ahead 2-1. Gonzalez then scored on a Carlos Correa groundout to make it 3-1.

The Astros (37-36) saddled Angels right-hander Matt Shoemaker (3-8) with the loss despite his stellar performance. Shoemaker did not allow a hit until there were two outs in the fourth inning and carried a shutout into the sixth before Jose Altuve smacked a solo home run.

Luke Gregerson (2-1) picked up a second consecutive win in relief and fellow right-hander Will Harris earned his sixth save.

Yankees 9, Rockies 8

Starlin Castro led off the bottom of the ninth with a home run as the Yankees blew an early four-run deficit and rallied for a victory.

The Yankees recorded their second walk-off win of the season and won for the fourth time in their last 10 games when Castro drove an 0-1 breaking ball from Jason Motte (0-1) into the left field seats.

It was Castro's sixth career game-ending hit and first walk-off home run.

The Yankees used their hard-throwing late-inning trio of Dellin Betances, Andrew Miller and Aroldis Chapman. They combined to get six strikeouts and Chapman (1-0) picked up the win by striking out DJ LeMahieu on a 102-mph pitch.

Mets 4, Royals 3

Matt Reynolds belted his first career home run to snap a tie in the sixth inning as New York beat Kansas City.

The Mets swept the two-game World Series rematch from the Royals and finished 3-1 this season against Kansas City, which won last year's Fall Classic in five games.

Reynolds, who played left field for the first time as a professional, struck out in his first two at-bats before homering to the opposite field off Joakim Soria (3-3) with two outs in the sixth. The homer made a winner out of Noah Syndergaard (8-2).

Marlins 3, Braves 0

Adam Conley pitched eight scoreless innings and Justin Bour blasted a two-run homer as Miami finally defeated last-place Atlanta.

The Marlins improved to 1-4 against the Braves this year at Marlins Park. Atlanta has won six of eight games overall against Miami this season.

Conley (4-4) threw 114 pitches -- two short of his season high. He held Atlanta to four hits, one hit-by-pitch, one wild pitch and one walk, striking out four.

Blue Jays 5, Diamondbacks 2

Russell Martin, Edwin Encarnacion and Troy Tulowitzki homered, J.A. Happ pitched five innings and the Blue Jays ended a three-game losing streak.

The Blue Jays gained a split in the two-game series and ended a five-game winning streak by the Diamondbacks.

Toronto starter Happ (9-3) allowed six hits, four walks and two earned runs in five inning. Roberto Osuna pitched a perfect ninth to earn his 14th save of the season.

Arizona starter Robbie Ray (4-6) allowed a three-run homer to Martin and a solo shot to Encarnacion to account for all four runs he allowed in 5 1/3 innings.

Brewers 4, Athletics 2

Junior Guerra pitched seven strong innings, Scooter Gennett and Kirk Nieuwenhuis homered, and the Milwaukee Brewers ended their four-game losing streak.

Guerra (4-1), a 31-year old rookie from Venezuela, gave up two runs on five hits in his 10th career major league start. Gennett went 3-for-5 with a two-run shot in the fifth inning, and Nieuwenhuis had a solo home run in the eighth.

A's rookie-right hander Daniel Mengden (0-3) gave up three runs on seven hits over six innings in his third career major league start. Coco Crisp went 2-for-3 with a solo home run and a double for the A's.

Indians 6, Rays 1

Trevor Bauer pitched a three-hitter for his second career complete game, and Carlos Santana had two hits and two RBIs as Cleveland completed a three-game sweep with a win over Tampa Bay at Progressive Field.

The Indians, who also got a two-run home run from Jason Kipnis, have won six games in a row overall and 11 in a row at home. Tampa Bay lost its seventh in a row.

Rays starter Chris Archer pitched six innings, giving up four runs on six hits and two walks. He fanned five.

Orioles 7, Padres 2

Mark Trumbo and Ryan Flaherty both homered, and starter Ubaldo Jimenez threw six strong innings as Baltimore defeated San Diego.

Trumbo had not homered since June 7 but hit a solo shot in the second inning, his 21st this season. Flaherty added a solo homer to start the fifth, and six Orioles each drove in at least one run.

Matt Wieters led the way with two RBIs while Hyun Soo Kim, Chris Davis, Jonathan Schoop, Trumbo and Flaherty each drove in a run.

Tigers 5, Mariners 1

Rookie Steven Moya hit a pair of home runs and veteran Miguel Cabrera added one Wednesday night to take over sole possession of 49th place on the all-time home run list and power Detroit over Seattle.

Moya, subbing for injured right fielder J.D. Martinez for at least a month, cracked both home runs off Hisashi Iwakuma (6-6), who gave up the three home runs among the 11 hits he allowed in his 4 2/3 innings.

Kyle Ryan got the win after he came on with the bases loaded and one out in the fifth and struck out pinch-hitter Franklin Gutierrez and got Robinson Cano to ground out to end the inning. He worked a three-batter sixth before turning the game over to Shane Greene, Justin Wilson and Francisco Rodriguez for an inning each. None of the four relievers gave up a hit, and starter Michael Fulmer gave up just three.

White Sox 8, Red Sox 6

Melky Cabrera and Brett Lawrie homered in the eighth inning to give the White Sox a win over the Red Sox, Chicago's third victory over Boston in as many nights.

Cabrera, who doubled home a first-inning run and added an RBI single on his fourth hit of the game in the ninth, connected on a two-run shot to tie the game with out in the eighth against reliever Koji Uehara. One out later, Lawrie connected off Uehara (2-3).

Hanley Ramirez, dropped to seventh in Boston's batting order, snapped a 4-4 tie with a solo homer in the sixth, and Xander Bogaerts drove in his third run of the game later in the inning. Bogaerts finished 3-for-5.

Rangers 6, Reds 4

Cole Hamels (8-1) pitched six innings of one-run ball, just what Texas needed after learning before the game that two starters were headed to the disabled list.

While the injuries to Colby Lewis and Derek Holland may eventually slow down the American League leaders, Hamels once again proved the value of an ace. He struck out eight and walked two and yielded five hits.

Ian Desmond and Shin-Soo Choo drilled solo home runs, and Prince Fielder drove in two for Texas, which split the two-game interleague series after having a seven-game win streak snapped the day before.

Giants 7, Pirates 6

Joe Panik's two-run, sixth-inning double finished off San Francisco's comeback from a five-run deficit, and the Giants withstood three Pittsburgh homers in the first three innings to beat the Pirates.

Ramiro Pena also drove in two runs as the Giants rebounded from a 6-1 deficit in the fourth to win their 10th in 11 games and their second in as many nights. San Francisco collected 22 runs and 34 hits in the two wins.

Gregory Polanco hit a three-run homer in the second inning during a three-hit night, but the Pirates still dropped their seventh in eight games and 12th in 14 games. They have gone from nine games over .500 on May 27 to four games under .500 while losing 19 of 25.

Twins 6, Phillies 5

Max Kepler's seventh-inning sacrifice fly provided Minnesota with the winning run in a victory over Philadelphia at Target Field.

With the game tied at 5, the Twins got back-to-back, one-out singles from Trevor Plouffe and Eduardo Escobar to put runners on the corners. Kepler lifted a fly ball to medium-deep left field, and Plouffe tagged up and beat left fielder Cody Asche's throw home for the lead run.

Taylor Rogers (3-0) earned the win for Minnesota, pitching one shutout inning in relief of starter Kyle Gibson.

Dodgers 4, Nationals 3

With the Dodgers trailing 3-2 and a runner on first in the bottom of the ninth, Yasiel Puig singled and made it all the way around the bases thanks to an outfield error, giving Los Angeles a 4-3 walk-off win against Washington. Thanks to the bizarre finish, the Dodgers completed a three-game series sweep.

After Joc Pederson struck out to open the ninth, pinch hitter Howie Kendrick singled off Shawn Kelley (1-1). Puig then hit a single to center field, and the ball rolled underneath Michael Taylor's glove, allowing both runners to score.