Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat 'ORA-00904 Invalid Identifier' Apabila Menggunakan Alias dalam Klausa WHERE?
Selesaikan ralat alias tidak sah dalam klausa WHERE
Apabila menggunakan alias dalam klausa WHERE, seperti contoh berikut, ralat "ORA-00904 tidak sah" mungkin berlaku:
<code class="language-sql">SELECT * FROM table_a A JOIN table_b B ON A.identifier = B.identifier WHERE MONTH_NO > UPD_DATE</code>
Ralat ini berlaku kerana apabila menggunakan alias (seperti MONTH_NO dan UPD_DATE) secara langsung dalam klausa WHERE, ia tidak dirujuk dalam senarai SELECT.
Sebab ralat:
Semasa pelaksanaan pertanyaan, klausa WHERE dinilai sebelum senarai SELECT. Oleh itu, Oracle tidak dapat mengenali alias dalam klausa WHERE sehingga alias ditakrifkan dalam senarai SELECT.
Penyelesaian:
Terdapat dua cara utama untuk menyelesaikan masalah ini:
1. Subkueri dan penapisan:
Buat subkueri yang mengandungi pengiraan dan alias yang diperlukan, kemudian tapis berdasarkan alias dalam pertanyaan luar.
<code class="language-sql">SELECT * FROM ( SELECT A.identifier, A.name, TO_NUMBER(DECODE(A.month_no, ...)) AS MONTH_NO, TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) AS UPD_DATE FROM table_a A JOIN table_b B ON A.identifier = B.identifier ) AS inner_table WHERE MONTH_NO > UPD_DATE</code>
2. Ungkapan jadual biasa (CTE):
Tentukan CTE untuk mencipta jadual sementara yang mengandungi pengiraan dan alias yang diperlukan, dan kemudian merujuk CTE dalam pertanyaan luar.
<code class="language-sql">WITH tmp_data AS ( SELECT A.identifier, A.name, TO_NUMBER(DECODE(A.month_no, ...)) AS MONTH_NO, TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) AS UPD_DATE FROM table_a A JOIN table_b B ON A.identifier = B.identifier ) SELECT * FROM tmp_data WHERE MONTH_NO > UPD_DATE</code>
Nota Prestasi:
Terdapat banyak pengoptimuman dalam versi Oracle semasa. Oracle tidak memerlukan pertanyaan dalaman untuk diwujudkan sebelum menggunakan syarat luaran. Pelayan akan menolak predikat untuk pelaksanaan kos efektif.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'ORA-00904 Invalid Identifier' Apabila Menggunakan Alias dalam Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!