Rumah >pangkalan data >tutorial mysql >Mengapa Menggunakan Alias dalam Klausa WHERE Kadang-kadang Mengakibatkan Ralat ORA-00904, dan Bagaimana Ini Boleh Diatasi?
Oracle SQL: Menyelesaikan Ralat ORA-00904 Apabila Menggunakan Alias dalam Klausa WHERE
Alias SQL memberikan nama ringkas untuk jadual atau lajur, meningkatkan kebolehbacaan pertanyaan. Walau bagaimanapun, secara langsung menggunakan alias yang ditakrifkan dalam pernyataan SELECT
dalam klausa WHERE
selalunya membawa kepada ralat.
Ralat "Pengecam Tidak Sah" ORA-00904
Pertimbangkan pertanyaan ini direka bentuk untuk menentukan baris dalam table_a
tidak dikemas kini baru-baru ini:
<code class="language-sql">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 AND MONTH_NO > UPD_DATE;</code>
Melaksanakan ini mungkin akan mengakibatkan ralat ORA-00904. Ini berlaku kerana Oracle memproses fasal WHERE
sebelum klausa SELECT
, bermakna MONTH_NO
dan UPD_DATE
belum ditakrifkan sebagai alias.
Penyelesaian Berkesan: Menggunakan Subkueri
Penyelesaian melibatkan penggunaan subkueri:
<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>
Pertanyaan dalaman mentakrifkan alias. Pertanyaan luar kemudiannya menggunakan alias yang ditakrifkan ini dalam klausa WHERE
nya untuk menapis hasil dengan berkesan, mengelakkan ralat ORA-00904. Kaedah ini memastikan alias tersedia untuk penapisan.
Atas ialah kandungan terperinci Mengapa Menggunakan Alias dalam Klausa WHERE Kadang-kadang Mengakibatkan Ralat ORA-00904, dan Bagaimana Ini Boleh Diatasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!