Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL 5.7 RAND() e IF() senza LIMITE porta a risultati inaspettati

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