Problemet er forårsaget af en ændring introduceret i MySQL 5.7 om, hvordan afledte tabeller i (under)forespørgsler behandles.
Grundlæggende, for at optimere ydeevnen, udføres nogle underforespørgsler på forskellige tidspunkter og/eller flere gange, hvilket fører til uventede resultater, når din underforespørgsel returnerer ikke-deterministiske resultater (som i mit tilfælde med RAND()
).
Der er to nemme (og ligeledes grimme) løsninger til at få MySQL til at "materialisere" (alias returnere deterministiske resultater) disse underforespørgsler:Brug LIMIT <high number>
eller GROUP BY id
som begge tvinger MySQL til at materialisere underforespørgslen og returnere de forventede resultater.
Den sidste mulighed er at slå derived_merge
fra i optimizer_switch
variabel:derived_merge=off
(sørg for at lade alle de andre parametre være som de er).
Yderligere læsninger:
https://mysqlserverteam.com/derived -tabeller-i-mysql-5-7/
Subquerys rand()-kolonne revurderet for hver gentagen valg i MySQL 5.7/8.0 vs. MySQL 5.6