Updated

PHILADELPHIA (AP) — Zach Duke outdueled Roy Halladay with a strong six innings, and the Pittsburgh Pirates bullpen held on for a 2-1 win over the Philadelphia Phillies on Tuesday night.

A night after the Pirates gave up 12 runs to the National League's most potent offense, Duke (3-4) limited Philadelphia to one run in six innings. Evan Meek, Joel Hanrahan and Octavio Dotel retired nine of the final 10 batters.

With a perfect ninth inning, Dotel recorded his eighth save in 10 chances, and snapped the Phillies' four-game winning streak.

Halladay (6-2), who leads the major leagues in innings pitched, gave up nine hits in his fourth complete game of the season. He walked one and struck out six.

The Phillies entered the game with the NL's best record (24-13) and had won 10 of their past 12, but struggled to solve Duke, who won for the first time since April 10. Despite a 5.56 ERA, the lefty kept Philadelphia guessing.

Pittsburgh scored in the second on back-to-back, two-out doubles by Ryan Doumit and Andy LaRoche, who entered the game in a 3-for-34 slump.

Philadelphia answered in the fifth, when Juan Castro's bases-loaded single scored Ryan Howard, but Andrew McCutchen kept the game tied when he threw out Jayson Werth at the plate. Halladay then struck out to end the inning.

The Pirates took the lead for good in the sixth on a single to right by Garrett Jones. Lastings Milledge, who had singled, scored when Werth throw bounced away from catcher Carlos Ruiz.

Duke escaped a bases-loaded jam in the sixth by getting Ben Francisco to bounce to third, and Meek, Hanrahan and Dotel did the rest.

NOTES: Phillies second baseman Chase Utley missed his second straight game with flu-like symptoms. ... Pirates setup man Brendon Donnelly (strained left oblique) threw a bullpen session on Tuesday and said he felt fine. He is expected to be activated in the next few days.