Rumah > pangkalan data > tutorial mysql > Mengapa Saya Tidak Boleh Membandingkan Alias ​​Secara Terus dalam Klausa WHERE, dan Bagaimana Saya Boleh Mengatasi Perkara Ini?

Mengapa Saya Tidak Boleh Membandingkan Alias ​​Secara Terus dalam Klausa WHERE, dan Bagaimana Saya Boleh Mengatasi Perkara Ini?

Barbara Streisand
Lepaskan: 2025-01-19 15:26:10
asal
786 orang telah melayarinya

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

WHERE Klausa Alias ​​Had dan Penyelesaian

Masalah:

Apabila membuat pertanyaan table_a untuk rekod yang tidak dikemas kini baru-baru ini, menggunakan alias dalam klausa WHERE mengakibatkan ralat "ORA-00904 Invalid Identifier". Ini berlaku kerana alias MONTH_NO belum ditakrifkan apabila klausa WHERE diproses.

Ini contohnya:

<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>
Salin selepas log masuk

Penyelesaian:

Klausa WHERE melaksanakan sebelum klausa SELECT, menghalang penggunaan alias langsung. Penyelesaiannya adalah dengan menggunakan subquery:

<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>
Salin selepas log masuk

Pendekatan ini mula-mula mentakrifkan alias dalam pertanyaan dalaman. Pertanyaan luar kemudian merujuk alias yang telah ditentukan ini, menyelesaikan ralat "pengecam tidak sah". SELECT * dalam pertanyaan luar memilih semua lajur daripada set hasil pertanyaan dalam.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Membandingkan Alias ​​Secara Terus dalam Klausa WHERE, dan Bagaimana Saya Boleh Mengatasi Perkara Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan