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

Er der ANY_VALUE-kapacitet til mysql 5.6?

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.



  1. En oversigt over VACUUM Processing i PostgreSQL

  2. Sådan aktiveres komprimering på en eksisterende tabel i SQL Server (T-SQL)

  3. Fatal fejl:[] operator understøttes ikke for strenge

  4. Sådan omdøbes en SQL Server-database ved hjælp af T-SQL