Déclarer et utiliser des variables dans une instruction SELECT
En SQL, attribuer une valeur à une variable et récupérer cette valeur dans la même requête peut être un défi. Prenons l'exemple suivant :
SELECT @z:=SUM(item), 2*@z FROM TableA;
Cette requête tente de calculer la somme de la colonne "item" et de la stocker dans une variable nommée "@z". Il multiplie ensuite la valeur de "@z" par 2. Cependant, étonnamment, la deuxième colonne renvoie toujours NULL.
Cela se produit parce que la documentation de MySQL indique explicitement que l'attribution d'une valeur à une variable utilisateur et sa lecture dans le il ne faut pas se fier à la même déclaration. L'ordre d'évaluation de ces expressions n'est pas défini et est susceptible de changer dans les versions futures.
Pour illustrer cela davantage, considérons la requête alternative :
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
Dans cette requête, "@z" est attribué une valeur via un appel de procédure. Dans ce scénario, la requête fonctionne comme prévu car l'appel de procédure est évalué séparément de l'affectation de variable.
Pour surmonter la limitation des variables utilisateur, vous pouvez utiliser une sous-requête pour attribuer la valeur et la récupérer dans le fichier principal. requête :
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
Dans cette sous-requête, la valeur de "@z" est attribuée à l'aide de SELECT. La requête principale sélectionne ensuite "@z" et effectue les calculs nécessaires.
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!