Du misbruger den berygtede ikke-standard MySQL-udvidelse til GROUP AF
. Standard SQL vil altid afvise din forespørgsel, fordi du nævner kolonner, der ikke er aggregerede og ikke er nævnt i GROUP BY
. I dit udviklersystem forsøger du at omgå det med ANY_VALUE()
.
I produktionen kan du deaktivere ONLY_FULL_GROUP_BY MySQL Mode . Prøv at gøre dette :
SET @mode := @@SESSION.sql_mode;
SET SESSION sql_mode = '';
/* your query here */
SET SESSION sql_mode = @mode;
Dette vil tillade MySQL at acceptere din forespørgsel.
Men se, din forespørgsel er ikke rigtig korrekt. Når du kan overtale den til at køre, returnerer den en tilfældigt valgt række fra images
bord. Den slags ubestemmelighed forårsager ofte forvirring for brugere og dit tekniske supportteam.
Hvorfor ikke gøre forespørgslen bedre, så den vælger et bestemt billede. Hvis dine images
tabel har en autoincrement id
kolonne kan du gøre dette for at vælge det "første" billede.
SELECT c.id, c.name, i.*
FROM countries c
LEFT JOIN (
SELECT MIN(id) id, country_id
FROM images
GROUP BY country_id
) first ON c.id = first.country_id
LEFT JOIN images i ON first.id = i.id
Det vil returnere en række pr. land med et forudsigeligt billede vist.