Définition et utilisation d'une variable dans une instruction SELECT
Dans SQL, il n'est généralement pas recommandé d'attribuer une valeur à une variable utilisateur et de l'utiliser dans la même instruction SELECT. La documentation de MySQL indique explicitement que l'ordre d'évaluation pour de telles expressions n'est pas défini et peut varier en fonction des éléments de relevé et des versions de serveur.
Pour illustrer ce point, considérez 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 retourner 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é 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-fiche:
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
Cette approche garantit que l'affectation variable se produit avant d'être utilisé dans la requête extérieure.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3