Maison > base de données > tutoriel mysql > L'instruction Select de MySQL peut-elle utiliser et redéfinir de manière fiable les variables utilisateur au sein d'une seule instruction ?

L'instruction Select de MySQL peut-elle utiliser et redéfinir de manière fiable les variables utilisateur au sein d'une seule instruction ?

Barbara Streisand
Libérer: 2024-12-03 10:41:17
original
233 Les gens l'ont consulté

Can MySQL's Select Statement Reliably Use and Redefine User Variables Within a Single Statement?

Définir et utiliser des variables dans une instruction Select

Dans MySQL, il n'est généralement pas conseillé d'attribuer des valeurs aux variables utilisateur et de lire ces valeurs dans la même déclaration. Bien qu'il puisse sembler fonctionner dans certains scénarios, ce comportement n'est pas garanti et peut varier en fonction des éléments spécifiques de l'instruction et de la version du serveur MySQL.

Par exemple, considérons l'instruction suivante :

SELECT 
    @z:=SUM(item),
    2*@z
FROM
    TableA;
Copier après la connexion

Dans ce cas, le résultat attendu serait que la deuxième colonne renvoie la valeur de 2 multipliée par la somme de la colonne élément. Cependant, MySQL peut évaluer l'instruction dans un ordre différent, ce qui entraîne une valeur NULL pour la deuxième colonne.

La raison derrière ce comportement est que MySQL ne garantit pas l'ordre d'évaluation des expressions impliquant des variables utilisateur. En modifiant légèrement l'instruction, par exemple en introduisant une clause GROUP BY, l'ordre d'évaluation peut changer.

Cependant, il existe une solution de contournement pour obtenir la fonctionnalité souhaitée en utilisant une sous-requête :

select @z, @z*2
from (SELECT @z:=sum(item)
      FROM TableA
     ) t;
Copier après la connexion

Dans cette sous-requête, la variable @z se voit attribuer la somme de la colonne d'éléments puis est sélectionnée avec sa valeur doublée. Cette approche garantit que la valeur de la variable est correctement évaluée et utilisée dans la deuxième colonne.

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