Maison > base de données > tutoriel mysql > Comment puis-je référencer les valeurs calculées de la clause SELECT dans une clause WHERE en SQL ?

Comment puis-je référencer les valeurs calculées de la clause SELECT dans une clause WHERE en SQL ?

Patricia Arquette
Libérer: 2025-01-11 10:51:41
original
401 Les gens l'ont consulté

How Can I Reference Calculated SELECT Clause Values in a WHERE Clause in SQL?

Clause SQL WHERE et valeurs calculées de la clause SELECT : un guide pratique

Le référencement direct aux alias définis dans l'instruction SELECT dans la clause WHERE d'une requête SQL entraîne souvent des erreurs. Cela est dû à l'ordre d'évaluation : la clause SELECT est traitée après la clause WHERE.

Considérez cet exemple problématique :

<code class="language-sql">SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue
FROM Invoices
WHERE BalanceDue > 0;</code>
Copier après la connexion

Cette requête échouera car BalanceDue n'est pas encore défini lorsque la clause WHERE est évaluée.

Voici deux solutions efficaces :

1. Utilisation d'une sous-requête :

Cette approche utilise une sous-requête pour pré-calculer la valeur, permettant son utilisation dans la clause WHERE de la requête externe :

<code class="language-sql">SELECT BalanceDue
FROM (
  SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue
  FROM Invoices
) AS sub
WHERE BalanceDue > 0;</code>
Copier après la connexion

La requête interne calcule BalanceDue et la requête externe filtre en fonction de ce résultat pré-calculé.

2. Calcul redondant dans la clause WHERE :

Vous pouvez également répéter le calcul directement dans la clause WHERE :

<code class="language-sql">SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue
FROM Invoices
WHERE (InvoiceTotal - PaymentTotal - CreditTotal) > 0;</code>
Copier après la connexion

Bien que plus simple, cette méthode peut entraîner des problèmes de performances avec des calculs très complexes, car l'expression est évaluée deux fois.

Optimisation des performances :

Les systèmes de bases de données modernes comme SQL Server optimisent souvent les requêtes, en exécutant des calculs complexes une seule fois, même avec des références répétées. Cependant, pour les calculs extrêmement complexes ou sensibles aux performances, il convient d'éviter de répéter le calcul dans la clause WHERE.

Pour les valeurs calculées fréquemment utilisées, la création d'une colonne calculée est une solution plus efficace à long terme. Cela stocke la valeur calculée de manière persistante, améliorant considérablement les performances des requêtes.

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