Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan Lajur Ekspresi CASE dalam Klausa Oracle 10.2 WHERE?

Bagaimanakah Saya Boleh Menggunakan Lajur Ekspresi CASE dalam Klausa Oracle 10.2 WHERE?

Patricia Arquette
Patricia Arquetteasal
2025-01-03 21:13:40824semak imbas

How Can I Use a CASE Expression Column in an Oracle 10.2 WHERE Clause?

Menggunakan 'Lajur Ungkapan Kes' dalam Klausa WHERE

Oracle 10.2 SQL menimbulkan cabaran apabila cuba menggunakan 'lajur ungkapan huruf besar' dalam klausa WHERE. Ralat "ORA-00904: "%s: pengecam tidak sah" ditemui disebabkan oleh susunan logik pemprosesan pernyataan SQL.

Tertib Logik Pemprosesan SQL

Pernyataan SQL diproses dalam perkara berikut jujukan:

  1. DARI: Pemilihan jadual dan baris gabungan
  2. DIMANA: Penapisan baris
  3. KUMPULAN OLEH: Pengumpulan baris
  4. MEMILIKI: Penapisan baris
  5. PILIH: Pengambilan lajur
  6. BERBEZA: Baris pendua penyingkiran
  7. UNION/EXCEPT/INTERSECT: Manipulasi hasil subquery
  8. PESANAN OLEH: Isih baris

Punca Ralat

Dalam klausa WHERE bagi pertanyaan asal:

SELECT ename
, job
, CASE deptno
WHEN 10
THEN 'ACCOUNTS'
WHEN 20
THEN 'SALES'
ELSE 'UNKNOWN'
END AS department
FROM emp
WHERE department = 'SALES'

The Lajur 'jabatan', yang dijana oleh ungkapan CASE, belum wujud lagi semasa penilaian klausa WHERE, klausa WHERE tidak boleh menggunakannya untuk perbandingan.

Penyelesaian 1: Lampiran Subkueri

Kepada. atasi had ini, sertakan pertanyaan dalam subkueri:

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: Duplikat Ungkapan CASE dalam Klausa WHERE

Sebagai alternatif, salin ungkapan CASE dalam klausa 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' ;

Pilihan Ringkas

Dalam kes di mana klausa WHERE syarat secara langsung sepadan dengan nombor jabatan tertentu, pilihan yang dipermudahkan mungkin:

SELECT ename
, job
, 'SALES' AS department
FROM emp
WHERE deptno = 20 ;

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Lajur Ekspresi CASE dalam Klausa Oracle 10.2 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