Heim >Datenbank >MySQL-Tutorial >Wie vermeide ich den ORA-00904-Fehler bei der Verwendung eines Alias ​​in einer SQL-WHERE-Klausel?

Wie vermeide ich den ORA-00904-Fehler bei der Verwendung eines Alias ​​in einer SQL-WHERE-Klausel?

Barbara Streisand
Barbara StreisandOriginal
2025-01-19 15:22:39789Durchsuche

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

Verwenden Sie Aliase in WHERE-Klauseln

Frage

Bei einer SQL-Abfrage zur Anzeige der Anzahl der Zeilen in einer Tabelle, die nicht kürzlich aktualisiert wurden, ist aufgrund der Verwendung eines Alias ​​in der WHERE-Klausel ein ORA-00904-Fehler aufgetreten. Benutzer suchen nach einer Lösung für dieses Problem, ohne die komplexe DECODE-Funktion in der WHERE-Klausel zu wiederholen.

Lösung

Die direkte Verwendung von Aliasen in der WHERE-Klausel ist nicht möglich, da WHERE vor SELECT ausgeführt wird, was der letzte Schritt der Abfrageausführung ist. Sie können jedoch eine Unterabfrage als Problemumgehung verwenden:

<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>

Dieser Unterabfrageansatz ermöglicht effektiv das Filtern basierend auf Alias-Ausdrücken, ohne dass der anfängliche Fehler auftritt.

Das obige ist der detaillierte Inhalt vonWie vermeide ich den ORA-00904-Fehler bei der Verwendung eines Alias ​​in einer SQL-WHERE-Klausel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn