Robert Lewandowski’s hat-trick saw Bayern Munich fight back from trailing 2-0 inside the opening 10 minutes to beat Borussia Dortmund 4-2 in Der Klassiker.
Dortmund had appeared on course for a first win at the Allianz Arena since the 2012/13 campaign after Erling Haaland’s early brace.
Lewandowski, though, started the fightback when he turned the ball in at the back post in the 26th minute, before levelling from a penalty just before half-time, which had been given following a VAR review.
Leon Goretzka completed the turnarond when he volleyed in a clearance during the 88th minute.
There was still enough time for Lewandowski, the Bundesliga’s top scorer, to chalk up his treble in added time with a low shot from outside the box.
RB Leipzig had earlier moved above Bayern at the top of the table with a 3-0 win at Freiburg, which was a sixth straight Bundesliga victory for Julian Nagelsmann’s side.
Christopher Nkunku put the visitors in front from close range just before half-time.
Alexander Sorloth doubled the lead in the 64th minute and substitute Emil Forsberg added a late third with a first-time finish from 18 yards
Third-placed Wolfsburg slipped to an unexpected 2-1 defeat at Hoffenheim, where they finished with 10 men.
Christoph Baumgartner gave the hosts an early lead, which was a first goal conceded by Wolfsburg in seven games, before Dutchman Wout Weghorst equalised in the 23rd minute with a chipped finish.
Andrej Kramaric, though, had Hoffenheim back in front before half-time.
Wolfsburg’s miserable afternoon was compounded when substitute Paulo Otavio was sent off in stoppage time for denying a goal-scoring opportunity.
Patrik Schick struck with 14 minutes left to give Bayer Leverkusen a 1-0 win at Borussia Monchengladbach and remain in contention for the top six as the hosts suffered a third successive league defeat.
Hertha Berlin finally secured a first Bundesliga win in 10 matches as they came from behind to beat Augsburg 2-1.
Laszlo Benes fired the visitors ahead inside two minutes, but Krzysztof Piatek equalised just after the hour and then, with only a minute left Dodi Lukebakio slotted in a winner from the penalty spot.
Eintracht Frankfurt and Stuttgart drew 1-1, with both goals coming within two minutes during the second half at the Commerzbank Arena.
Sasa Kalajdzic gave the visitors the lead from close range in the 67th minute, but it was short-lived as Filip Kostic, who earlier had seen a goal disallowed by VAR, quickly pulled Frankfurt level.
In LaLiga, Barcelona continued their impressive form with a 2-0 win at Osasuna to close up on leaders Atletico Madrid.
Jordi Alba fired the visitors ahead in the 30th minute, with teenage substitute Ilaix Moriba adding a late second for his first Barcelona goal.
It was a fourth league win in five games for Ronald Koeman’s side, who kept the pressure on at the top – now just two points behind Atletico ahead of Sunday’s derby with Real Madrid.
Sevilla had earlier missed the chance to close on the top three after they suffered a shock 2-1 defeat at relegation-battlers Elche.
Julen Lopetegui’s side had been looking to respond from their Copa Del Rey semi-final exit against Barcelona in midweek.
Raul Guti, though, gave the home side the lead with 20 minutes left before Guido Carrillo’s header went in off the post.
Luuk De Jong struck a consolation goal in stoppage time, but there was to be no more late drama as Sevilla slumped to a third successive LaLiga defeat and Elche moved out of the bottom three.
Alvaro Negredo’s strike just before the break was enough to give Cadiz a 1-0 win over strugglers Eibar – who saw an early goal ruled out by VAR.
Eibar then had a second-half penalty from goalkeeper Marko Dmitrovic saved by opposite number Jeremias Ledesma as they dropped to 18th.
Real Valladolid, though, boosted their survival hopes with a 2-1 home win over Getafe, who finished with 10 men.
Oscar Plano gave Valladolid the lead in the 14th minute, with Sean Weissman soon adding a second.
Jaime Mata pulled a goal back for Getafe ahead of the break, with the forward later shown a straight red card for a poor tackle with five minutes left.
Alvaro Morata struck twice as Juventus came from behind to beat Lazio 3-1 and move third in Serie A.
Cristiano Ronaldo started on the bench, and it was Lazio who went ahead in the 14th minute through Joaquin Correa.
Adrien Rabiot equalised five minutes before half-time with an angled drive, before Morata added a quick-fire brace in the space of three second-half minutes to wrap up victory.
Morata put the Bianconeri in front following a counter-attack in the 57th minute and then slotted home from the penalty spot after Aaron Ramsey had been bundled over.
Udinese beat Sassuolo 2-0, with a late first-half goal from Fernando Llorente, his first for the club, and Roberto Pereyra’s stoppage-time strike on the counter-attack.
Saturday’s earlier kick-off saw Spezia fight back to draw 1-1 at home against Benevento.
Daniele Verde equalised when he knocked in a rebound with just 19 minutes left after Adolfo Gaich had put the visitors in front midway through the first-half for his first Serie A goal.