sql >> Database >  >> RDS >> Mysql

Is er ANY_VALUE mogelijkheid voor mysql 5.6?

Je misbruikt de beruchte niet-standaard MySQL-extensie voor GROUP DOOR . Standaard SQL zal uw zoekopdracht altijd afwijzen, omdat u kolommen vermeldt die geen aggregaties zijn en niet worden vermeld in GROUP BY . In je ontwikkelsysteem probeer je dat te omzeilen met ANY_VALUE() .

In productie kunt u de ONLY_FULL_GROUP_BY MySQL-modus uitschakelen . Probeer dit te doen :

  SET @mode := @@SESSION.sql_mode;
  SET SESSION sql_mode = '';
  /* your query here */
  SET SESSION sql_mode = @mode;

Hierdoor kan MySQL uw vraag accepteren.

Maar kijk, je vraag is niet echt correct. Wanneer je het kunt overtuigen om te starten, retourneert het een willekeurig gekozen rij uit de images tafel. Dat soort onbepaaldheid veroorzaakt vaak verwarring bij gebruikers en uw technische ondersteuningsteam.

Waarom maakt u de zoekopdracht niet beter, zodat deze een bepaalde afbeelding kiest. Als uw images tabel heeft een autoincrement id kolom kunt u dit doen om de "eerste" afbeelding te selecteren.

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

Dat levert één rij per land op met een voorspelbare afbeelding.



  1. De EXECUTE-toestemming is geweigerd voor het object 'xxxxxxx', database 'zzzzzzz', schema 'dbo'

  2. Transactielogboekbewaking

  3. Hoe de waarde van het samengestelde variabele veld in te stellen met behulp van dynamische SQL

  4. SQL, hoe een tabelstructuur bij te werken