Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat ORA-00904 Apabila Menggunakan Ungkapan CASE dalam Klausa WHERE?

Bagaimana untuk Menyelesaikan Ralat ORA-00904 Apabila Menggunakan Ungkapan CASE dalam Klausa WHERE?

Barbara Streisand
Barbara Streisandasal
2025-01-03 08:50:40167semak imbas

How to Resolve ORA-00904 Error When Using CASE Expressions in WHERE Clauses?

Mengatasi ORA-00904: Menggunakan 'lajur ungkapan kes' dalam Klausa WHERE

Apabila cuba menggunakan ungkapan kes sebagai lajur dalam Klausa WHERE, ORA-00904 boleh timbul disebabkan oleh susunan logik pemprosesan SQL. Klausa WHERE dinilai sebelum klausa SELECT, menjadikannya mustahil untuk menggunakan lajur yang ditakrifkan dalam ungkapan kes SELECT.

Penyelesaian 1: Pertanyaan Bersarang

Untuk menyelesaikan isu ini , sertakan pertanyaan asal dalam bersarang pertanyaan:

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: Pengiraan Pendua

Sebagai alternatif, salin ungkapan kes dalam keadaan WHERE itu sendiri:

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

Pertanyaan Ringkas

Untuk kes tertentu dikemukakan, pertanyaan yang dipermudahkan juga boleh digunakan:

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

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat ORA-00904 Apabila Menggunakan Ungkapan CASE dalam Klausa 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