Zack Greinke's bid for his first career no-hitter was thwarted by Pittsburgh's Gregory Polanco's leadoff home run in the eighth inning and the Arizona Diamondbacks held on to beat the Pirates 2-1 Thursday night. Greinke (4-2), who dominated the Pirates with a vicious slider, allowed that one hit in eight innings. He struck out 11 and walked one. Fernando Rodney pitched a scoreless ninth for his ninth save in 11 tries. Greinke faced the minimum 21 batters through seven innings. Jordy Mercer led off the third with a walk but was thrown out trying to steal second. Gerrit Cole (1-4) allowed two runs and seven hits in seven innings. He struck out five and walked one. Pittsburgh has scored five runs total in Cole's last five starts. Rockies 10, Dodgers 7 Jeff Hoffman struck out eight to earn his first major league win, Carlos Gonzalez showed signs of breaking out of a slump with a two-hit, three-RBI night and the Rockies held off the Dodgers. Ian Desmond and Nolan Arenado each added two doubles to help the Rockies extend their lead in the NL West to 2 1/2 games over the Dodgers. Red Sox 4, Brewers 1 Mookie Betts' three-run home run in the ninth inning lifted the Red Sox to a victory over the Brewers. It was Betts' fifth homer of the season and third in his last four games, and helped Boston salvage one win in the three-game series in the Red Sox's first trip to Milwaukee since 2003. Royals 6, Rays 0 Major league ERA leader Jason Vargas went seven more scoreless innings, Salvador Perez had a two-run double during a five-run eighth inning and the Royals beat the Rays. Vargas (5-1) scattered three hits and dropped his ERA from 1.19 to 1.01. Astros 3, Yankees 2 Defensive replacement Jake Marisnick made a perfect throw from left field to nail Jacoby Ellsbury at the plate for the final out and the Astros held off the Yankees in a matchup between teams with the best records in Baseball. Unbeaten Dallas Keuchel (6-0) became the first six-game winner in the majors, helped by a home run from Carlos Correa. The Astros won their fourth in a row and improved to 24-11 — their top mark after 35 games since the franchise began playing in 1962. Blue Jays 7, Mariners 2 Steve Pearce hit a three-run home run, Justin Smoak had a solo homer and finished with four RBIs, and the Blue Jays beat the Mariners, snapping Seattle's win streak at four. Marco Estrada (2-2) allowed two runs over six innings for the Blue Jays, who have won four of five. Rangers 5, Padres 2 Mike Napoli's second homer was a game-ending three-run shot and the Rangers beat the Padres. The Rangers had been held scoreless by San Diego starter Clayton Richard until Napoli hit a 433-foot homer to left on the first pitch of the eighth inning. Twins 7, White Sox 6 Eduardo Escobar hit a three-run homer then added a fourth RBI with a double as the Twins outlasted the struggling White Sox. Brian Dozier and Miguel Sano crushed solo shots and Joe Mauer singled in a run for Minnesota, which hung on to deal the White Sox a season-high fifth straight loss after jumping out to a 6-0 lead in the second inning. Tigers 7, Angels 1 Justin Upton hit a three-run homer and Michael Fulmer pitched seven innings of three-hit ball in the Tigers' victory over the Angels. Mike Trout went 0 for 4 as the Angels' designated hitter after missing five straight games and six of the previous seven with a tight left hamstring. The two-time AL MVP hadn't played since last Friday, and his 17-game hitting streak ended. Reds 3, Giants 2 Zack Cozart had two extra-base hits, including an RBI double in the top of the eighth inning that scored the game-winner, as the Reds defeated the Giants. The Reds won for the ninth time in 11 games and have won 15 of their last 20 games at AT&T Park going back to the 2012 NLDS. — AP