SAN FRANCISCO -- Anthony Rizzo's two-out, two-strike smash in the ninth inning got through San Francisco Giants first baseman Brandon Belt for an error that spelled the difference in the Chicago Cubs' 3-2 win Friday night in the opener of a three-game series.
The Cubs played without Alfonso Soriano, who was traded earlier in the day to the New York Yankees for minor-league pitcher Corey Black.
The game matched fourth-place teams in their respective divisions that began the night separated by a just half-game in overall record, but headed in different directions.
The win was the Cubs' 24th on the road this season, allowing them to pass last year's season total. They are 15-10 overall since falling a season-worst 13 games under .500 on June 25.
The Giants, meanwhile, lost for the 20th time in their last 28 games since being two games over .500 on June 22. They fell to 7-17 against National League Central teams this season.
Down to their last out, the Cubs rallied against Giants closer Sergio Romo (3-5), who was seeking his 25th save.
With the Cubs trailing 2-1, pinch-hitters Julio Borbon and Dioner Navarro got the ninth going with a single and walk, respectively.
Romo struck out David DeJesus and got Junior Lake to ground into a fielder's choice at second base. But with Lake running on a full-count pitch to Rizzo, the usually sure-handed Belt couldn't handle a hard shot right at him deep behind first base. Belt was charged with an error that allowed both Borbon and Lake to score.
Kevin Gregg nailed down the Chicago win after surrendering a leadoff hit to Pablo Sandoval in the bottom of the ninth. Gregg got the next three Giants in order to record his 19th save.
Reliever Matt Guerrier (4-4) got the win.
The low-scoring affair featured an improbable pitchers' duel between two of just four NL starting pitchers who began the day Friday with ERA's in the 5's -- the Giants' Matt Cain (5.00) and Cubs' Edwin Jackson (5.03).
Down 1-0 going into the bottom of the seventh, the Giants finally solved Jackson (6-12). Two walks, one intentional, helped.
After Sandoval had walked with one out, Hunter Pence doubled into the left-field corner, sending his teammate to third.
Cubs manager Dale Sveum then opted to intentionally walk Belt to load the bases, a strategy Jeff Francoeur foiled by blooping the first pitch he saw into right field to plate two runs and give the Giants a 2-1 lead.
The RBIs were just the second and third in nine games as a Giant for Francoeur, claimed off waivers from the Kansas City Royals earlier this month.
Cain had a second consecutive solid outing after a much needed break sandwiching the All-Star Game. He had gotten torched for 11 runs in three total innings in his last two starts before the break.
Cain completed seven innings for the first time in July and limited the Cubs to six hits, two of which came consecutively in the fifth inning to produce Chicago's only run. He struck out seven and walked just one..
Held scoreless on three hits by Cain through five innings, the Cubs finally broke through in the sixth after a one-out double by former Giant Nate Schierholtz. Starlin Castro delivered the game's first run with a grounder up the middle that barely eluded diving second baseman Tony Abreu.
Like Cain, Jackson got a no-decision after a quality effort. He allowed only four hits in 6 2-3 innings, walking two and striking out five.
NOTES: Giants RF Hunter Pence made his 111th consecutive start, the longest current streak in the NL and tops among Giants since LF Barry Bonds started 222 in a row bridging 1995 and 1996. ... The Cubs and Giants made a trade before the game, with San Francisco acquiring RHP Guillermo Moscoso for cash and a player to be named later. Moscoso, acquired by the Cubs in spring training off waivers from the Toronto Blue Jays, started 17 games for Chicago's Triple-A affiliate in Iowa, going 7-5 with a 3.93 ERA. ... Filling the roster spot created in the Soriano trade, the Cubs promoted RHP Eduardo Sanchez from Triple-A Iowa. ... The Giants activated INF Joaquin Arias off the disabled list before the game, sending RHP Jake Dunning to Triple-A Fresno.