HOUSTON -- Roy Oswalt allowed one hit in eight innings and struck out 10, outpitching Randy Johnson in the Houston Astros' 3-0 victory over the Arizona Diamondbacks on Sunday.
Ty Wigginton hit a three-run homer off Johnson in the first inning, sending the Astros to their ninth victory in 11 games.
Arizona, which had won three straight, fell into a first-place tie in the NL West with the Los Angeles Dodgers.
Oswalt (11-8) walked two and matched a season high for strikeouts. He is 5-0 in his last seven starts, and improved to 7-1 in his career against Arizona.
The right-hander retired the final 15 batters he faced. Jose Valverde finished the two-hitter, allowing only Drew's single in the ninth before earning his 31st save in 37 tries.
Trying for his 295th win, Johnson (10-9) allowed eight hits and a walk in seven innings. He struck out five but lost for the first time in seven career starts against Houston. The Big Unit entered 4-0 with a 3.60 ERA against the Astros.
Mets 4, Pirates 0
PITTSBURGH (AP) -- Johan Santana pitched a three-hitter for his fifth career shutout and streaking New York got home runs from Brian Schneider and Carlos Beltran.
Argenis Reyes added three hits for the Mets, who have won six straight and 10 of 13. New York began the day leading the NL East by two games over Philadelphia.
Santana (11-7) retired his first 10 hitters before Jack Wilson singled and Freddy Sanchez reached on an error in the fourth. Wilson had two hits for the Pirates, who have dropped four straight and seven of nine.
Santana threw 85 of 113 pitches for strikes en route to his eighth career complete game and second this season. His previous shutout was June 19, 2007, when he blanked the Mets for Minnesota.
Jeff Karstens (2-2) went six innings, allowing four runs and nine hits.
Cubs 9, Marlins 2
MIAMI (AP) -- Two-run doubles by Alfonso Soriano and Aramis Ramirez and a three-run double by Reed Johnson sparked an eight-run seventh that rallied Chicago past Florida.
Ryan Dempster (14-5) struck out 10 batters in six innings to win for the fourth time in six starts. He gave up two runs, the sixth straight game in which he has allowed two runs or fewer.
The Cubs, who had their nine-game road winning streak snapped with a 2-1 loss on Saturday, rebounded to win for the sixth time in seven games overall. Chicago began the day with a 4 1/2 game lead in the NL Central.
The third-place Marlins lost for the fourth time in five games to fall 4 1/2 games behind the New York Mets in the NL East.
Reliver Renyel Pinto (2-5) gave up five runs in two-thirds of an inning. It was the third straight appearance in which Pinto has allowed at least a run, and he has allowed 11 earned runs in 3 2-3 innings in August.
Dodgers 7, Brewers 5
LOS ANGELES (AP) -- Andre Ethier hit his second homer of the game in the ninth inning and Los Angeles recovered to beat Milwaukee moments after blowing a four-run lead.
The Dodgers also got homers from Manny Ramirez and Matt Kemp to move into a first-place tie with Arizona in the NL West.
Ryan Braun returned to the starting lineup for Milwaukee and hit a tying home run with two outs in the top of the ninth off Chan Ho Park, who slammed his glove to the ground when the ball cleared the fence.
Kemp led off the bottom half with a single against Carlos Villanueva (4-6) and Ethier followed with a drive to right field on a 1-2 pitch for his 15th homer.
Joe Beimel (4-0) relieved Park after Braun's homer and got one out for the win. Ramirez had three RBIs for the Dodgers, who have won six of seven.
Reds 7, Cardinals 3
CINCINNATI (AP) -- A revived Edinson Volquez pitched seven shutout innings and traded up-and-in fastballs with counterpart Kyle Lohse, helping Cincinnati end St. Louis' four-game winning streak.
Despite getting only three hits off Volquez (15-5), the Cardinals headed home in a good frame of mind. St. Louis went 6-4 on its trip and got hints that its offense in coming around in time for a run at the NL wild card.
They couldn't get to Volquez, who has been one of Cincinnati's few bright spots. The Reds have lost 17 of their last 22 games, putting them on course for an eighth straight losing season.
Jay Bruce and Jeff Keppinger had run-scoring singles off Lohse (13-6), who helped the Cardinals' injury-depleted rotation get through the first half of the season but has slipped into a slump of his own, losing three of his last four starts.
Brandon Phillips hit a three-run homer in the seventh off Jaime Garcia.
Giants 3, Braves 1
ATLANTA (AP) -- Tim Lincecum pitched 7 2-3 strong innings and closer Brian Wilson got San Francisco out of a bases-loaded jam in the eighth, helping San Francisco beat Atlanta.
Showing no bad effects from the bruised knee that forced him out of his last start, Lincecum (13-3) allowed three hits, one run and four walks while striking out 10 -- five with runners in scoring position.
San Francisco manager Bruce Bochy pulled his ace after Chipper Jones' single gave the Braves two baserunners in the eighth. Reliever Jack Taschner allowed an RBI single to Mark Kotsay, the first batter he faced, and Bochy brought in Wilson.
Wilson, who pitched the ninth to earn his NL-leading 33rd save in 35 chances, intentionally walked Brian McCann before ending the eighth on Jeff Francoeur's fielder's choice grounder.
Rookie Charlie Morton (3-7) remained winless in seven starts at Turner Field after giving up seven hits, three runs, two walks and six strikeouts in his first career appearance against the Giants.
Rockies 7, Nationals 2
WASHINGTON (AP) -- Ian Stewart and Seth Smith hit three-run homers, Aaron Cook struggled through five innings for his 15th victory and Colorado beat Washington, handing the Nationals their season-high 10th straight loss.
It's the longest skid for the Nationals since they moved to Washington before the 2005 season, and the franchise's worst since the Montreal Expos dropped 11 games in a row from June 23-July 4, 1991.
Cook (15-8), whose scheduled Thursday start was pushed back because of lower back fatigue and tightness, won for the first time in three August outings. The right-hander allowed two runs and seven hits, and averted his first three-game losing streak of the season.
Brad Hawpe added a solo homer for Colorado, which swept the weekend series and has won four of five overall.
Perez (5-9) went six innings, giving up three runs -- two earned -- and four hits.