Heim > Datenbank > MySQL-Tutorial > Warum kann ich Aliase in einer WHERE-Klausel nicht direkt vergleichen und wie kann ich das umgehen?

Warum kann ich Aliase in einer WHERE-Klausel nicht direkt vergleichen und wie kann ich das umgehen?

Barbara Streisand
Freigeben: 2025-01-19 15:26:10
Original
786 Leute haben es durchsucht

Why Can't I Directly Compare Aliases in a WHERE Clause, and How Can I Work Around This?

WHERE-Klausel-Alias-Einschränkungen und Lösungen

Problem:

Bei der Abfrage von table_a nach Datensätzen, die nicht kürzlich aktualisiert wurden, führt die Verwendung von Aliasen in der WHERE-Klausel zu einem Fehler „ORA-00904 Ungültiger Bezeichner“. Dies liegt daran, dass der Alias ​​MONTH_NO noch nicht definiert ist, wenn die WHERE-Klausel verarbeitet wird.

Hier ist ein Beispiel:

<code class="language-sql">SELECT A.identifier
     , A.name
     , TO_NUMBER(DECODE( A.month_no, 1, 200803, ..., 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
   AND MONTH_NO > UPD_DATE</code>
Nach dem Login kopieren

Lösung:

Die WHERE-Klausel wird vor der SELECT-Klausel ausgeführt und verhindert so die direkte Aliasverwendung. Die Lösung besteht darin, eine Unterabfrage zu verwenden:

<code class="language-sql">SELECT * FROM
(
  SELECT A.identifier
    , A.name
    , TO_NUMBER(DECODE( A.month_no, 1, 200803, ..., 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>
Nach dem Login kopieren

Dieser Ansatz definiert zunächst die Aliase innerhalb der inneren Abfrage. Die äußere Abfrage verweist dann auf diese bereits definierten Aliase und behebt so den Fehler „Ungültiger Bezeichner“. Das SELECT * in der äußeren Abfrage wählt alle Spalten aus der Ergebnismenge der inneren Abfrage aus.

Das obige ist der detaillierte Inhalt vonWarum kann ich Aliase in einer WHERE-Klausel nicht direkt vergleichen und wie kann ich das umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage