Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan Lajur Ungkapan CASE dalam Klausa WHERE Pertanyaan Oracle 10.2?
Menggunakan 'Lajur Ungkapan Kes' dalam Klausa WHERE dalam Oracle 10.2
Dalam Oracle 10.2, ralat ORA-00904 berlaku apabila cuba untuk gunakan lajur ungkapan kes dalam klausa WHERE. Ini timbul disebabkan oleh susunan pemprosesan logik pernyataan SQL, di mana keadaan WHERE dinilai sebelum lajur dipilih.
Penjelasan Ralat:
Pernyataan SQL diproses secara logik dalam tertib berikut:
Dalam pertanyaan yang disediakan, klausa WHERE cuba menggunakan lajur jabatan dikira dalam ungkapan CASE. Walau bagaimanapun, lajur ini tidak diisi sehingga selepas pelaksanaan klausa WHERE, yang membawa kepada ralat.
Penyelesaian 1: Lampiran Subquery
Untuk mengatasi had ini, sertakan yang asal pertanyaan dalam subkueri dan pilih lajur yang dikehendaki daripada ia:
SELECT * FROM ( SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp ) tmp WHERE department = 'SALES' ;
Penyelesaian 2: Replikasi Bersyarat
Replikasi ungkapan KES dalam keadaan WHERE:
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END = 'SALES' ;
Alternatif Penyelesaian:
Jika boleh, pertimbangkan untuk menggunakan yang lebih mudah pertanyaan:
SELECT ename , job , 'SALES' AS department FROM emp WHERE deptno = 20 ;
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Lajur Ungkapan CASE dalam Klausa WHERE Pertanyaan Oracle 10.2?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!