Les variables temporaires MySQL peuvent-elles être utilisées dans la clause WHERE ?
P粉798343415
P粉798343415 2023-10-24 10:37:42
0
2
587

Dans MySQL, les variables temporaires peuvent-elles être utilisées dans la clause WHERE ?

Par exemple, dans la requête suivante :

SELECT `id`, @var := `id` * 2 FROM `user`

@var a été défini avec succès sur deux fois la valeur de `id`

Cependant, si j'essaie de filtrer l'ensemble de résultats pour inclure uniquement les résultats où @var est inférieur à 10 :

SELECT `id`, @var := `id` * 2 FROM `user` WHERE @var < 10

Ensuite, je n'ai obtenu aucun résultat.

Comment filtrer les résultats en fonction de la valeur de @var ?

P粉798343415
P粉798343415

répondre à tous(2)
P粉760675452

Q : Les variables temporaires MySQL peuvent-elles être utilisées dans la clause WHERE ?

Oui. Les variables MySQL définies par l'utilisateur (telles que @var) peuvent être référencées dans la clause WHERE.

Une variable définie par l'utilisateur est une référence à la valeur qui lui est actuellement attribuée lorsque l'expression est évaluée.

Dans une requête, les prédicats de la clause WHERE sont évalués avant les expressions de la liste SELECT.

C'est-à-dire que lors de l'accès à une ligne, @var sera évaluée comme une expression booléenne ; pour chaque ligne candidate, l'expression est évaluée et la ligne n'est renvoyée que si le résultat est VRAI.

Si vous deviez fournir à cette variable une valeur numérique supérieure ou égale à 10, toutes les lignes seraient renvoyées avant d'exécuter l'instruction.

Q : Comment filtrer les résultats en fonction de la valeur de @var ?

Vous ne pouvez vraiment pas. (En fait, c'est ce que fait votre requête d'origine.)

Vous pouvez inclure des prédicats dans des expressions autres que @var 之外的其他表达式中包含谓词;这些表达式可以从分配给 @var ; ces expressions peuvent être dérivées de la valeur attribuée à

.

HAVING 子句来过滤返回的行。 (注意:HAVING 子句在结果集准备好之后进行计算;与 WHEREEn option, vous pouvez renvoyer une expression dans la liste SELECT, puis utiliser une autre clause

, qui évalue le moment où les lignes sont accédées. )

Une autre option consiste à utiliser une vue en ligne pour préparer le jeu de résultats, puis la requête externe peut utiliser une clause WHERE sur l'expression renvoyée.

@var 以外的表达式应用谓词;他们实际上并没有对 @varMais à proprement parler, ces méthodes appliquent toutes des prédicats à des expressions autres que

; elles ne testent pas réellement les valeurs de 🎜 ; 🎜
P粉530519234

Vous devez attribuer un alias et le tester dans la clause HAVING :

SELECT id, @var := id * 2 AS id_times_2
FROM user
HAVING id_times_2 < 10

Notez que si vous utilisez simplement une formule pour filtrer, plutôt que de transmettre les résultats internes d'une ligne à la suivante, vous n'avez pas du tout besoin de cette variable. Vous pouvez écrire :

SELECT id, id * 2 AS id_times_2
FROM user
HAVING id_times_2 < 10
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal