Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengelakkan Ralat ORA-00904 Apabila Menggunakan Alias ​​dalam Klausa SQL WHERE?

Bagaimana untuk Mengelakkan Ralat ORA-00904 Apabila Menggunakan Alias ​​dalam Klausa SQL WHERE?

Barbara Streisand
Barbara Streisandasal
2025-01-19 15:22:39747semak imbas

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

Gunakan alias dalam klausa WHERE

Soalan

Pertanyaan SQL yang direka untuk memaparkan bilangan baris dalam jadual yang tidak dikemas kini baru-baru ini menghadapi ralat ORA-00904 disebabkan penggunaan alias dalam klausa WHERE. Pengguna sedang mencari penyelesaian kepada masalah ini tanpa mengulangi fungsi DECODE kompleks dalam klausa WHERE.

Penyelesaian

Menggunakan alias secara langsung dalam klausa WHERE tidak boleh dilaksanakan kerana WHERE dilaksanakan sebelum SELECT, iaitu langkah terakhir pelaksanaan pertanyaan. Walau bagaimanapun, anda boleh menggunakan subkueri sebagai penyelesaian:

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

Pendekatan subkueri ini dengan berkesan membenarkan penapisan berdasarkan ungkapan alias tanpa menghadapi ralat awal.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat ORA-00904 Apabila Menggunakan Alias ​​dalam Klausa SQL WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn