Maison > base de données > tutoriel mysql > Comment imiter la fonction ANY_VALUE de MySQL dans la version 5.6 ?

Comment imiter la fonction ANY_VALUE de MySQL dans la version 5.6 ?

Mary-Kate Olsen
Libérer: 2024-11-29 22:12:11
original
327 Les gens l'ont consulté

How to Mimic MySQL's ANY_VALUE Function in Version 5.6?

MySQL 5.6 : Alternative à la fonction ANY_VALUE

Lorsque vous travaillez avec les versions 5.7 et 5.6 de MySQL, vous pouvez rencontrer des problèmes concernant la fonction ANY_VALUE, qui n'est disponible que dans la version 5.7. Cela peut entraîner de la confusion et des erreurs lors de l'exécution de la requête. La question se pose : comment peut-on obtenir des fonctionnalités similaires dans MySQL 5.6 ?

MySQL 5.6 ne fournit pas d'équivalent direct à ANY_VALUE. Cependant, il existe des approches alternatives qui peuvent obtenir le résultat souhaité.

Désactiver le mode ONLY_FULL_GROUP_BY

Une option consiste à désactiver le mode SQL ONLY_FULL_GROUP_BY. Ce mode impose que toutes les colonnes non agrégées référencées dans une instruction SELECT doivent également apparaître dans la clause GROUP BY. En désactivant ce mode, MySQL permettra d'exécuter des requêtes comme celle-ci sans erreur :

SELECT c.id, c.name,
       ANY_VALUE(i.url) url, 
       ANY_VALUE(i.lat) lat, 
       ANY_VALUE(i.lng) lng 
  FROM countries c, images i
 WHERE i.country_id = c.id
 GROUP BY c.id;
Copier après la connexion

Pour désactiver ONLY_FULL_GROUP_BY, utilisez la syntaxe suivante :

  SET @mode := @@SESSION.sql_mode;
  SET SESSION sql_mode = '';
  /* your query here */
  SET SESSION sql_mode = @mode;
Copier après la connexion

Cependant, il est important noter que la désactivation de ONLY_FULL_GROUP_BY peut conduire à des résultats incorrects ou à un comportement inattendu dans certains cas.

Sélection de la « première » valeur

Une autre approche consiste à modifier la requête pour sélectionner une valeur spécifique dans la table des images, telle que la première. Ceci peut être réalisé en utilisant la fonction MIN() et les sous-requêtes :

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
Copier après la connexion

Cette requête renverra une ligne par pays, l'image étant la première du tableau, classée par son identifiant. Cette approche fournit un résultat prévisible et cohérent.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal