Du udfører en group by
(3 kolonner) med 5 kolonner af ikke-aggregerede kolonner i udvalgslisten. Det betyder heller ikke noget, der er ingen aggregater i kolonneoutputtet.
MySQL behandler det som en distinct
(for de 3 kolonner) og bringer den første række tilbage, den støder på i MRU-cachen, og hvis der ikke er nogen cache, de første, der stødes på i det klyngede indeks eller den fysiske rækkefølge for at tilfredsstille de 2 ikke-grupperede kolonner.
Det er med andre ord en brugerfejl. En lureri. Jeg anbefaler at rydde op i din hensigt med GROUP BY
.
Lidt relateret, læs mit nylige svar Her
relateret til ONLY_FULL_GROUP_BY
. Se i bunden af det link er MySQL-håndtering af GRUPPER EFTER
som efter min mening er en udviskning af de reelle problemer og ikke-standarder, som MySQL tillod, hvilket gjorde uventede og svære at forklare data fra overtrædelser af denne standard.
Så hvad gjorde MySQL-udviklerteamet? De implementerede standarden som standard (startende i version 5.7) for at forhindre de typer forespørgsler, du lige har udført.
Rediger1
Din forespørgsel uden GROUP BY
men med en order by newGroups.id,people.id
, på en version 5.7.14-server: