Chris Smalling’s second-half header secured Roma’s first win over Inter Milan since 2017 and left the Nerazzurri’s hopes of forcing their way back into the Serie A title race in tatters at San Siro.
Federico Dimarco had opened the scoring for the home side on the half-hour mark but Paulo Dybala equalised with a stunning volley nine minutes later and Smalling rose to head the winner 15 minutes from time.
The result handed Jose Mourinho his first win over his former club and left Inter languishing eight points behind leaders Napoli, who consolidated their advantage with a 3-1 win over struggling Torino.
Andre Frank Zambo Anguissa scored an early double and Khvicha Kvaratskhelia added a third with a stunning solo effort before Antonio Sanabria gave his side a glimmer of hope by reducing the deficit.
AC Milan conjured a remarkable late finish to win 3-1 at Empoli, who had looked set to salvage a point when Nedim Bajrami’s stoppage-time free-kick cancelled out an opener from Ante Rebic.
But Milan regained the lead straight from the restart with a cool finish from Fode Ballo-Toure, and there was even time for Rafael Leao to add a third before the final whistle.
Barcelona stretched their winning run in LaLiga to six games with a hard-fought 1-0 win at Mallorca.
Robert Lewandowski grabbed his ninth league goal of the season when he cut into the box and steered his shot into the bottom corner.
A goal in each half from Marcos Llorente and Alvaro Morata helped Atletico Madrid shrug off the memory of their recent painful defeat to city rivals Real as they eased to a 2-0 win at Sevilla.
Sergio Leon scored twice as Real Valladolid ended a run of two straight losses with a 3-2 win at in-form Getafe, while struggling Cadiz consigned Villarreal to their third game without a win after holding them a goalless draw despite the late dismissal of Isaac Carcelen.
Kylian Mbappe came off the bench to send Paris St Germain back to the top of Ligue 1 with a 2-1 win over Nice.
Lionel Messi’s brilliant free-kick was cancelled out by a Gaetan Laborde strike early in the second half but Mbappe, a 59th-minute replacement for Hugo Ekitike, fired the winner seven minutes from time.
Goals from Arnaud Kalimuendo, Martin Terrier and Amine Gouiri helped Rennes to a 3-1 win at Strasbourg, who played with 10 men following the 28th-minute dismissal of Gerzine Nyamsi.
Surprise Bundesliga leaders Union Berlin saw their unbeaten start to the season brought to an end by a 2-0 defeat at 10-man Eintracht Frankfurt.
Goals from Mario Gotze and Jesper Lindstrom put the hosts in command before half-time and they held firm despite the 68th-minute dismissal of Randal Kolo Muani.
Berlin’s loss allowed Freiburg to pull level on points at the top of the table as goals from Michael Gregoritsch and Daniel Kofi-Kayereh helped them maintain their superb start to the season with a 2-1 win over Mainz.
There was a setback for Borussia Dortmund, who surrendered a half-time lead to lose 3-2 at Cologne, for whom Florian Kainz, Steffen Tigges and Dejan Ljubicic turned the game around in 18 second-half minutes.
Werder Bremen scored three times in the opening 13 minutes as they marked a spectacular return to form with a 5-1 thrashing of Borussia Monchengladbach.
Two goals each from Timo Werner and Christopher Nkunku saw RB Leipzig ease past bottom club Bochum 4-0, while Stuttgart remain winless after a 3-2 defeat at Wolfsburg, for whom Yannick Gerhardt scored the winner in stoppage time.