KANSAS CITY, Mo. -- Mark Reynolds finally got to Zack Greinke.
After striking out his first three times up, Reynolds homered off the Kansas City ace to get him out of the game and the Diamondbacks put up six more runs against the bullpen to beat the Royals 12-5 Wednesday.
Reynolds brought his NL-leading total to 93 before taking Greinke deep to left with two out in the seventh for a 6-2 lead.
"He pitched me tough all night," Reynolds said. "I couldn't really get anything going with him in my first three ABs. You're battling your tail off to try to do something positive and he gets the best of you. It's really, really frustrating. He hung a slider and I was able to get good wood on it and hit it out.
"It seems like elite pitchers like that I'll punch out a couple of times and then somehow find the barrel. Those were big runs for our team and kind of opened the floodgates."
The Diamondbacks scored eight runs in the final three innings.
"The finishing blow was Reynolds' home run," Diamondbacks manager A.J. Hinch said. "He's one swing away from having a great night every time."
Max Scherzer (4-4) held the Royals to two runs on nine hits and three walks, winning for the fourth time in five decisions.
"The turning point was when we started scoring runs off Greinke," Scherzer said. "We took the momentum of the game and we just never let it go. That's a credit to our hitters, grinding it out against one of the best pitchers in the game. I'm not really facing him. I'm facing the Kansas City Royals and the hitters."
Stephen Drew hit a three-run triple in the Diamondbacks' five-run eighth and Chris Young had three walks and a single, scoring each time to match his career high.
Greinke (8-3) has an 5.46 ERA in his past four starts after beginning the season 7-1. His overall ERA rose to 1.96 as he gave up six runs, four earned, on eight hits, while striking out nine.
"You go through streaks like that throughout the year," Greinke said. "I'm better than what I've done the past couple of starts. I felt like I started pitching better today. I just didn't finish it. For some reason, I'm having trouble doing that lately when usually I can finish off innings real good. That's what's really been the problem the last four starts is getting two outs and then not getting the last guy out.
The Diamondbacks took advantage of errors by Jose Guillen and Miguel Olivo to score three runs in the fourth and take a 4-1 lead.
Guillen's errant throw home from right field on Miguel Monitor's single allowed Young and Monitor to move up a base before Olivo dropped the ball when Mark Teahen threw home on Chris Synd.'s grounder, allowing both runners to score.
"We've got to play catch," Royals manager Trey Hillman said. "We've got to play better defense behind Zack in that situation. Those last two columns on the board, left on base (13), and we've got to do a better job of getting two-out hits. We got some two-out hits in the previous four wins."
Guillen drove in three runs with a two-out double in the first and groundout in the fifth after Mike Jacobs tripled. Guillen added a RBI single in the Royals' three-run ninth.
Kansas City's Mitch Maier had three hits, matching his career high.
Royals RHP Sidney Ponson, on the disabled list with a strained elbow, made his first minor league rehab start Wednesday with Triple-A Omaha, pitching two scoreless innings, allowing one hit and striking out two at New Orleans. ... The Diamondbacks' 12 runs matched a season high. They also scored 12 on May 15 at Atlanta. ... The Royals lead the majors with 24 triples. Jacobs' triple was his first with Kansas City.