Il problema è causato da una modifica introdotta in MySQL 5.7 su come vengono trattate le tabelle derivate nelle (sotto)query. risultati quando la tua sottoquery restituisce risultati non deterministici (come nel mio caso con RAND()
).
Esistono due soluzioni facili (e altrettanto brutte) per convincere MySQL a "materializzare" (ovvero restituire risultati deterministici) queste sottoquery:Usa LIMIT <high number>
o GROUP BY id
entrambi obbligano MySQL a materializzare la sottoquery e restituire i risultati attesi.
L'ultima opzione è disattivare derived_merge
nel optimizer_switch
variabile:derived_merge=off
(assicurati di lasciare tutti gli altri parametri così come sono).
Ulteriori letture:
https://mysqlserverteam.com/derived -tabelle-in-mysql-5-7/
Colonna rand() della sottoquery rivalutata per ogni selezione ripetuta in MySQL 5.7/8.0 rispetto a MySQL 5.6