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

Sử dụng Bí danh trong mệnh đề WHERE

Điều này là không thể trực tiếp, vì theo thứ tự thời gian, WHERE xảy ra trước CHỌN, luôn là bước cuối cùng trong chuỗi thực thi.

Bạn có thể thực hiện một lựa chọn phụ và lọc trên đó:

SELECT * FROM
(
  SELECT A.identifier
    , A.name
    , TO_NUMBER(DECODE( A.month_no
      , 1, 200803 
      , 2, 200804 
      , 3, 200805 
      , 4, 200806 
      , 5, 200807 
      , 6, 200808 
      , 7, 200809 
      , 8, 200810 
      , 9, 200811 
      , 10, 200812 
      , 11, 200701 
      , 12, 200702
      , NULL)) as MONTH_NO
    , TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
  FROM table_a A
    , table_b B
  WHERE A.identifier = B.identifier
) AS inner_table
WHERE 
  MONTH_NO > UPD_DATE

Một chút thông tin thú vị được chuyển lên từ các bình luận:

Không nên xảy ra lỗi hiệu suất. - Hang động Justin



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LOOP SQL động

  2. TẢI THÔNG TIN DỮ LIỆU tương đương trong Oracle

  3. Hiệu suất điều chỉnh mê cung

  4. Hàm JSON_VALUE () trong Oracle

  5. Tách tệp văn bản / CSV lớn thành nhiều tệp trong PL SQL