Mysql
 sql >> Base de données >  >> RDS >> Mysql

Existe-t-il une capacité ANY_VALUE pour mysql 5.6 ?

Vous utilisez à mauvais escient la extension MySQL notoire non standard pour GROUP PAR . Le SQL standard rejettera toujours votre requête, car vous mentionnez des colonnes qui ne sont pas des agrégats et qui ne sont pas mentionnées dans GROUP BY . Dans votre système de développement, vous essayez de contourner cela avec ANY_VALUE() .

En production, vous pouvez désactiver le ONLY_FULL_GROUP_BY MySQL Mode . Essayez de faire ceci :

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

Cela permettra à MySQL d'accepter votre requête.

Mais écoutez, votre requête n'est pas vraiment correcte. Lorsque vous pouvez le persuader de s'exécuter, il renvoie une ligne choisie au hasard parmi les images table. Ce type d'indétermination est souvent source de confusion pour les utilisateurs et votre équipe d'assistance technique.

Pourquoi ne pas améliorer la requête, afin qu'elle choisisse une image particulière. Si vos images la table a un id d'auto-incrémentation colonne, vous pouvez le faire pour sélectionner la "première" image.

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

Cela renverra une ligne par pays avec une image prévisible affichée.