Bryan LaHair continued his early-season surge, collecting three hits, including a two-run homer, as the Cubs bested the Cardinals, 6-4, in the first of a two-game set on Monday.
Alfonso Soriano drove in the go-ahead run in the eighth inning that would prove to be the difference and Tony Campana scored twice as Chicago won its second straight.
Shawn Camp (2-1) tossed two scoreless innings, allowing just one hit in relief of Ryan Dempster to get the victory, and Rafael Dolis struck out two in a perfect ninth for his fourth save of the year.
Yadier Molina doubled in two runs for St. Louis while Mitchell Boggs (0-1) allowed two runs -- one earned -- on two hits and a walk in two relief frames to suffer the setback, the club's fourth in a row.
"We've got a lot of baseball to play ahead of us," said Cardinals manager Mike Matheny. "We've seen the kind of baseball we can play, and we've seen the kind that we can play on the poor end also if we're not careful."
Tied at four in the eighth, Starlin Castro had bunted into a double play with runners on first and second and no outs. After LaHair was intentionally walked though, Soriano blooped a single to right, plating Campana from second for the eventual winning run.
The Cubs tacked on an insurance run in the top of the ninth when David Freese aired out an errant throw to first on a sacrifice attempt. Geovany Soto sprinted home from second on the play.
Earlier, Chicago had a big inning in the fifth after both teams were held scoreless through four. LaHair smashed a pitch over the wall down the line in right with Castro aboard, in between RBI singles from Castro and Soto.
LaHair is batting .356 for the season.
"I just try to have good at-bats, try to hit balls hard," said LaHair. "I've just been fortunate to have some success at this point in the season."
But St. Louis had its own four-run inning in the home sixth to tie the game. Lance Berkman got the club on the board with a run-scoring single, Yadier Molina ripped a two-run double and he came around to score on Skip Schumaker's base hit.
The Cubs left the bases loaded in the second, third and seventh innings.
Matt Holliday, Skip Schumaker and Freese committed an error apiece for St. Louis...Dempster allowed four runs on nine hits and a walk with five strikeouts over six innings...Cardinals starter Jake Westbrook surrendered four runs on 11 hits and two walk in five innings.