Billy Hamilton made key defensive plays and the Reds ended their 13-game skid against St. Louis, beating the Cardinals 6-3.
Hamilton threw out two runners, then made outstanding catches against the wall in the eighth and ninth innings. He also tripled and scored twice.
The Cardinals' overall winning streak against Cincinnati was their longest since the 1930-1931 seasons. The Reds had lost 11 straight home games to St. Louis.
Scooter Gennett drove in two runs and the Reds capitalized on the Cardinals' season-high 11 walks.
The Cardinals piled up 10 hits in five-plus innings against Anthony DeSclafani (1-1), who was making his second start since Sept. 28, 2016.
Hamilton threw out Jose Martinez trying to stretch a single into a double to end the first inning. Martinez originally was ruled safe, but the call was overturned after a replay review.
Hamilton also threw out pitcher Carlos Martinez trying to score from first on Matt Carpenter's single to end the fourth. Hamilton tried for a diving catch, knocked the ball away, but recovered to throw home.
Amir Garrett allowed an unearned run in the sixth and Michael Lorenzen pitched a perfect seventh before Jared Hughes pitched the eighth and ninth for his fourth save.
The Reds scored five runs on just four hits in 3 2/3 innings against Martinez (3-3), who was making his second start since coming off the disabled list with a strained back muscle. He issued a season-high seven walks, one short of tying his career high, while hitting a batter and uncorking a wild pitch on ball four that allowed Hamilton to go from first to third. Martinez has 12 walks in 7 2/3 innings over his last two starts.