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