The Cardinals won for the eighth time in 10 games by scoring eight runs in the fifth, sixth and seventh innings to take a 9-3 lead.
Jake Westbrook (6-4) allowed two runs on eight hits over 6 1/3 for the victory. He also had three of the 14 St. Louis hits and scored twice.
The loss went to Jason Marquis (9-5), who coughed up six runs on eight hits with three walks in 5 1/3. It was his third straight loss.
San Diego has dropped 15 of its last 17 games.
Attkisson leaves CBS News, reportedly over network's 'liberal bias'
McPhee, Cokas 'working on their marriage' after affair