Nick Swisher homered from both sides of the plate, hitting his second grand slam in four games and adding a solo shot to lead the host Chicago White Sox to a 9-7 victory over Cleveland.
Jim Thome got the White Sox started with a three-run homer in the first as the American League Central leaders won their fifth straight and knocked the Indians 10 1/2 games back.
Cleveland's Jhonny Peralta went 5 for 5 with three doubles, his 12th homer and three RBIs. The Indians scored three in the ninth before Matt Thornton got Casey Blake to line out with a runner on for his first save.
The switch-hitting Swisher, who had a grand slam against the Cubs Friday, connected from the right side against Jeremy Sowers (0-4) to cap a five-run third inning. It was the major league-leading eighth grand slam given up by Cleveland's pitching staff this season.
In the sixth, Swisher went deep from the left side against Tom Mastny - the seventh time he's homered from both sides, including twice this season.
Thome's three-run homer was his second in two games and the 523d of his career.
Gavin Floyd (9-4) allowed four runs and seven hits with a career-high 10 strikeouts over six innings.
Cardinals 7, Mets 1 - Kyle Lohse allowed an unearned run in seven innings for his seventh straight win and Albert Pujols had two hits and two RBIs as host St. Louis topped New York.
Chris Duncan added a two-run homer, his first since May 16, for the Cardinals and Aaron Miles had three hits while extending his hitting streak to 12 games.
Lohse (10-2) allowed five hits, struck out four, and walked two.
Reds 4, Pirates 3 - Ken Griffey Jr. hit a two-run homer in the bottom of the ninth inning to rally Cincinnati.
Griffey's 603d homer came off Matt Capps (1-3), who started the ninth with a 3-2 lead but couldn't get an out. David Ross opened with a double, and Griffey - who got into the game as a defensive replacement in the ninth - hit the second pitch he saw into the seats in right-center.
Astros 4, Dodgers 1 - Houston's Roy Oswalt struck out nine in six strong innings, then left with a strained hip in a win over visiting Los Angeles.
Oswalt (7-8) allowed a run and six hits, but walked off the field with a trainer after throwing his warmup pitches for the seventh. Manager Cecil Cooper said Oswalt strained his left hip abductor in the sixth inning and is day-to-day.
Marlins 6, Nationals 5 - Josh Willingham hit a home run in the bottom of the 10th for Florida after Hanley Ramirez had forced extra innings with a homer in the ninth.
It was the third career walkoff homer for Willingham, whose shot off Jon Rauch (4-2) was his second of the game. Willingham's two-run homer in the third put Florida ahead, 3-1.
Tigers 5, Twins 4 - Curtis Granderson's go-ahead RBI single capped visiting Detroit's two-run eighth inning to defeat Minnesota.
Granderson's single to right-center fell two steps in front of Carlos Gomez, allowing Matt Joyce to trot home from third and helping Detroit win its sixth straight.
Cubs 9, Giants 2 - Mark DeRosa hit a grand slam and a two-run homer to match his career high with six RBIs, Ted Lilly pitched eight shutout innings, and visiting Chicago ended a four-game skid.
Diamondbacks 6, Brewers 3 - Mark Reynolds homered, doubled twice, and drove in three runs, and Arizona defeated Milwaukee
Padres 15, Rockies 8 - Edgar Gonzalez's second homer of the game capped visiting San Diego's seven-run ninth inning as the Padres ended their eight-game losing streak with a victory at Denver.
Athletics 6, Angels 1 - Rookie Greg Smith (5-6) threw a four-hitter and Eric Chavez hit a two-run double to lead visiting Oakland.
Blue Jays 2, Mariners 0 - Roy Halladay (9-6) pitched his 10th career shutout, limiting host Seattle to just four singles in Toronto's third straight win.
Royals 6, Orioles 5 - Miguel Olivo homered off George Sherrill with two outs in the ninth to force extra innings, and Jose Guillen singled in the tiebreaking run in the 11th for visiting Kansas City.