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

MySQL 5.7 RAND() og IF() uden LIMIT fører til uventede resultater

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




  1. Sådan læser du den sidste række med SQL Server

  2. Hvordan får jeg vist det fulde indhold af en tekst- eller varchar(MAX)-kolonne i SQL Server 2008 Management Studio?

  3. Sådan implementeres MariaDB Server til en Docker Container

  4. MySQL flere kolonner i IN-klausul