Het probleem wordt veroorzaakt door een wijziging die is aangebracht in MySQL 5.7 in de manier waarop afgeleide tabellen in (sub)query's worden behandeld.
Om de prestaties te optimaliseren, worden sommige subquery's op verschillende tijdstippen en/of meerdere keren uitgevoerd, wat leidt tot onverwachte resultaten wanneer uw subquery niet-deterministische resultaten retourneert (zoals in mijn geval met RAND()
).
Er zijn twee gemakkelijke (en eveneens lelijke) oplossingen om MySQL deze subquery's te laten "materialiseren" (ook wel deterministische resultaten retourneren):Gebruik LIMIT <high number>
of GROUP BY id
beide dwingen MySQL om de subquery te realiseren en de verwachte resultaten te retourneren.
De laatste optie is het uitschakelen van derived_merge
in de optimizer_switch
variabele:derived_merge=off
(zorg ervoor dat u alle andere parameters laat zoals ze zijn).
Verdere lezingen:
https://mysqlserverteam.com/derived -tables-in-mysql-5-7/
Subquery's kolom rand() opnieuw geëvalueerd voor elke herhaalde selectie in MySQL 5.7/8.0 versus MySQL 5.6