After getting hit by a pitch in the sixth, Harrison has been hit by a pitch five times in his last six games. He leads all major league players with 16 hit by pitches this season.
Getting hit by a pitch is part of the job, Harrison said.
"There's only been a few this year that haven't hurt," said Harrison, who has reached base safely in his last 20 road games. "What I like to say `It would probably kill common man."
Pittsburgh manager Clint Hurdle likes what Harrison does for the Pirates.
"He creates a wake, a positive wake out there," Hurdle said. "He's swinging the bat well. He's playing good defense. All the things combined, he's playing really good baseball. He's a fun player to watch."
Cole (6-6) extended his winning streak to three games, allowing five hits and one run with five strikeouts and two walks.
In Cole's four losing starts from May 22 through June 8, he surrendered 23 runs in 19 1/3 innings. Since then, he has reeled off three solid starts. Before Saturday, he allowed just three hits and one run in seven innings in each of his previous two starts.
"I just keep doing my job," Cole said. "You're going to make good pitches. You're going to make bad pitches. You're going to get hit and you're going to get away with some. There's always another pitch and another day."
Pittsburgh has won four of its last six games.
Slumping St. Louis has dropped eight of its last 11. The 33-40 start for the Cardinals is their worst since 2007.
Lance Lynn (5-5) struggled for the second consecutive start. He gave up seven runs and six hits, including three homers in 5 2/3 innings. In his previous start at Baltimore, Lynn gave up nine hits, seven runs and a season-high four home runs in 4 2/3 innings.
In his first season back after Tommy John surgery, Lynn has given up 20 home runs.
"I know if you look at it from the last two starts, that's two in a row that you'd like back," Lynn said. "But I got to make sure I end it at that. You're going to go through a rut or something like that and you don't want to do that in the season and right now I'm in that."
Before Saturday, Lynn had not allowed a run in his past 12 innings against the Pirates. He fired seven scoreless innings in a 2-1 win against Pittsburgh on April 17 at Busch Stadium.
"He made some mistakes and we got him," Hurdle said about Lynn. "Good for us. He's been tough on us here."
Pittsburgh scored in the first on a two-out RBI single by Josh Bell that scored Harrison.
St. Louis quickly tied it at 1-all on Matt Carpenter's first leadoff homer of the season. It was Carpenter's 13th leadoff home run of his career.
The homer marked a season-high 13 straight games in which the Cardinals have hit a home run.
The Pirates regained the lead at 3-1 on a two-run, two-out homer by Mercer.Andrew McCutchen singled before Mercer lined a fastball over the wall just inside the left field foul pole.
"He's steady Eddie," Hurdle said about Mercer. "He's raised his average 80 points and now he has seven homers and 28 RBI, which is impressive from where he was from a month ago."
A two-out solo homer by Harrison in the fifth put Pittsburgh up 4-1.
"I think today was the case of a couple of sliders that got up on him," manager Mike Matheny said. "I actually thought he was throwing the ball well. Just a couple of mistakes that really cost him."
The Pirates sent nine batters to the plate in the sixth and scored three runs on just one hit to chase Lynn. David Freese led off with a walk and went to third on a single by McCutchen before scoring on Mercer's groundout. After intentionally walking Chris Stewart, Lynn walked Cole.
The Cardinals added two runs in the ninth off reliever Wade LeBlanc.
SATURDAY IN THE PARK
With the victory, Pittsburgh improved to 10-2 in games played on Saturday this season.
BLACK AND BLUE
Since the start of the 2013 season, Pittsburgh batters have been hit a major league-leading 374 times.
"I don't try to make anything more of than people maybe just trying to pitch inside," Hurdle said.
Pirates: RHP Josh Lindblom (left side discomfort) was activated Saturday from the DL. He remains at Triple-A Indianapolis where he had been rehabbing.
Cardinals: C Yadier Molina missed his second consecutive game. He took a foul tip off his knee on Thursday in Philadelphia.
Pirates: RHP Chad Kuhl (2-6, 5.46 ERA) has not pitched more than five innings since tossing six April 8 against St. Louis, losing a 2-1 decision. Kuhl won his last outing Tuesday, a 7-3 win over Milwaukee to snap a six-game losing streak.
Cardinals: RHP Mike Leake (5-6, 3.03 ERA) has 10 wins against the Pirates, the most he has against any opponent. Leake has not won since May 24 when he pitched eight innings against Los Angeles in a 6-1 win.