Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Sử dụng 'cột biểu thức chữ hoa chữ thường' trong mệnh đề where

Lý do cho lỗi này là SQL SELECT tuyên bố về mặt logic * được xử lý theo thứ tự sau:

  • FROM :lựa chọn một bảng hoặc nhiều bảng đã THAM GIA và tất cả các kết hợp hàng phù hợp với ON điều kiện.

  • WHERE :các điều kiện được đánh giá và các hàng không khớp sẽ bị xóa.

  • GROUP BY :các hàng được nhóm lại (và mọi nhóm thu gọn thành một hàng)

  • HAVING :các điều kiện được đánh giá và các hàng không khớp sẽ bị xóa.

  • SELECT :danh sách các cột được đánh giá.

  • DISTINCT :các hàng trùng lặp bị xóa (nếu đó là câu lệnh SELECT DISTINCT)

  • UNION , EXCEPT , INTERSECT :hành động của toán hạng đó được thực hiện trên các hàng của câu lệnh SELECT con. Ví dụ:nếu đó là UNION, tất cả các hàng được tập hợp (và các hàng trùng lặp bị loại trừ trừ khi đó là UNION ALL) sau khi tất cả các câu lệnh CHỌN phụ được đánh giá. Theo đó đối với các trường hợp NGOẠI LỆ hoặc INTERSECT.

  • ORDER BY :các hàng được sắp xếp.

Do đó, bạn không thể sử dụng trong WHERE mệnh đề, một cái gì đó chưa được điền hoặc tính toán. Xem thêm câu hỏi này:oracle-sql-khoản-đánh giá-order

Lưu ý rằng các công cụ cơ sở dữ liệu cũng có thể chọn một thứ tự đánh giá khác cho một truy vấn (và đó là những gì chúng thường làm!) Hạn chế duy nhất là kết quả phải giống như khi thứ tự trên được sử dụng .

Giải pháp là đặt truy vấn trong một truy vấn khác :

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

hoặc để sao chép phép tính trong điều kiện 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' ;

Tôi đoán đây là phiên bản đơn giản hóa của truy vấn của bạn hoặc bạn có thể sử dụng:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để hủy tất cả các phiên kết nối với cơ sở dữ liệu oracle của tôi?

  2. Chèn và cập nhật dựa trên bản ghi trong Oracle

  3. Cách nhanh hơn để Chèn, thông qua tập lệnh, trong Oracle?

  4. Kích thước tối đa của VARCHAR2 trong PL / SQL và SQL là bao nhiêu?

  5. cách chọn danh sách 10.000 id duy nhất từ ​​kép trong SQL oracle