Définir et utiliser une variable dans une instruction Select
En SQL, il n'est généralement pas recommandé d'attribuer une valeur à une variable utilisateur et utilisez-le dans la même instruction select. La documentation de MySQL indique explicitement que l'ordre d'évaluation de ces expressions n'est pas défini et peut varier en fonction des éléments de la déclaration et des versions du serveur.
Pour illustrer ce point, considérons la requête suivante :
SELECT @z:=SUM(item), 2*@z FROM TableA;
Dans cette requête, vous vous attendez à ce que la deuxième colonne renvoie la valeur de @z multipliée par deux. Cependant, MySQL peut renvoyer NULL, car l'ordre d'évaluation n'est pas garanti. Ce comportement diffère de l'utilisation d'une procédure stockée au lieu d'une variable utilisateur, comme indiqué ci-dessous :
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
Dans ce cas, les résultats attendus sont obtenus car l'appel de procédure stockée est évalué avant l'affectation de la variable.
Pour résoudre ce problème et définir une variable dans une instruction select, vous pouvez utiliser une sous-requête :
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
Cette approche garantit que l'affectation de la variable se produit avant qu'elle ne soit utilisée dans la requête externe.
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!