Maison >base de données >tutoriel mysql >Puis-je utiliser un alias de colonne calculé dans une clause SQL WHERE ?

Puis-je utiliser un alias de colonne calculé dans une clause SQL WHERE ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-11 10:36:41633parcourir

Can I Use a Calculated Column Alias in a SQL WHERE Clause?

Clause SQL WHERE et alias de colonnes calculés

L'utilisation directe d'un alias de colonne calculé dans une clause SQL WHERE n'est généralement pas prise en charge. Par exemple, cette requête échouera :

<code class="language-sql">SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue
FROM Invoices
WHERE BalanceDue > 0; -- Error</code>

Solutions :

Deux méthodes efficaces contournent cette limitation :

1. Sous-requête (requête imbriquée) :

Cette approche encapsule le calcul dans une sous-requête :

<code class="language-sql">SELECT BalanceDue
FROM (
  SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue
  FROM Invoices
) AS x
WHERE BalanceDue > 0;</code>

2. Répétition d'expression :

Vous pouvez également reproduire le calcul dans les clauses SELECT et WHERE :

<code class="language-sql">SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue
FROM Invoices
WHERE (InvoiceTotal - PaymentTotal - CreditTotal) > 0;</code>

Considérations relatives aux performances :

Bien que la sous-requête puisse sembler moins efficace, les systèmes de bases de données modernes comme SQL Server optimisent souvent les requêtes de manière efficace. Les plans d'exécution des deux méthodes sont souvent identiques, indiquant des performances similaires.

Optimisation avancée : colonnes calculées

Pour les calculs complexes utilisés de manière répétée sur plusieurs requêtes, une colonne calculée offre un avantage significatif en termes de performances. Cette colonne pré-calculée simplifie les requêtes et réduit les calculs redondants.

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!

Déclaration:
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