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
Lepaskan: 2025-01-03 21:13:40
asal
812 orang telah melayarinya

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

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

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

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

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!

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