Maison >base de données >tutoriel mysql >Comment éviter l'erreur ORA-00904 lors de l'utilisation d'un alias dans une clause SQL WHERE ?

Comment éviter l'erreur ORA-00904 lors de l'utilisation d'un alias dans une clause SQL WHERE ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-19 15:22:39745parcourir

How to Avoid ORA-00904 Error When Using an Alias in a SQL WHERE Clause?

Utiliser des alias dans les clauses WHERE

Question

Une requête SQL conçue pour afficher le nombre de lignes d'une table qui n'ont pas été récemment mises à jour a rencontré une erreur ORA-00904 en raison de l'utilisation d'un alias dans la clause WHERE. Les utilisateurs recherchent une solution à ce problème sans répéter la fonction complexe DECODE dans la clause WHERE.

Solution

L'utilisation d'alias directement dans la clause WHERE n'est pas réalisable car WHERE est exécuté avant SELECT, qui est la dernière étape de l'exécution de la requête. Cependant, vous pouvez utiliser une sous-requête comme solution de contournement :

<code class="language-sql">SELECT * FROM
(
  SELECT A.identifier
    , A.name
    , TO_NUMBER(DECODE( A.month_no
      , 1, 200803 
      , 2, 200804 
      , 3, 200805 
      , 4, 200806 
      , 5, 200807 
      , 6, 200808 
      , 7, 200809 
      , 8, 200810 
      , 9, 200811 
      , 10, 200812 
      , 11, 200701 
      , 12, 200702
      , NULL)) as MONTH_NO
    , TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
  FROM table_a A
    , table_b B
  WHERE A.identifier = B.identifier
) AS inner_table
WHERE 
  MONTH_NO > UPD_DATE</code>

Cette approche de sous-requête permet effectivement un filtrage basé sur des expressions d'alias sans rencontrer l'erreur initiale.

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