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

làm thế nào để chọn các bản ghi chẵn từ một bảng trong oracle?

Nó không hoạt động vì:đối với hàng đầu tiên ROWNUM1 và trong trường hợp này, MOD(ROWNUM,2)1 và kể từ WHERE của bạn câu lệnh là MOD(ROWNUM,2)=0 sau đó điều này giảm xuống 1=0 và hàng bị loại bỏ. Sau đó, hàng tiếp theo sẽ được kiểm tra với ROWNUM của 1 (vì hàng trước đó không còn trong đầu ra và sẽ không có số hàng), hàng này sẽ lại không đạt thử nghiệm và bị loại bỏ. Lặp lại, bảo tàng quảng cáo và tất cả các hàng đều lỗi WHERE thử nghiệm và bị loại bỏ.

Nếu bạn cố gắng lấy các hàng lẻ theo cách này bằng cách sử dụng WHERE MOD(ROWNUM,2)=1 thì nó sẽ chỉ trả về hàng đầu tiên và hàng thứ hai, và các hàng tiếp theo sẽ không đạt yêu cầu kiểm tra và sẽ không bao giờ được đưa vào truy vấn.

Như Vijaykumar Hadalgi đề xuất, bạn cần chọn ROWNUM trong một truy vấn phụ (nơi nó có thể đánh số tất cả các hàng mà không có mệnh đề where để hạn chế nó) và sau đó trong truy vấn bên ngoài, hãy thực hiện kiểm tra để hạn chế các hàng:

SELECT ename, job
FROM   (
  SELECT ename,
         job,
         ROWNUM AS row_id             -- Generate ROWNUM second.
  FROM   (
    SELECT ename, job
    FROM   Emp
    ORDER BY ename                    -- ORDER BY first.
  )
)
WHERE  MOD( row_id, 2 ) = 0;          -- Filter third.

SQLFIDDLE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn con đệ quy với sắp xếp

  2. CriteriaQuery bộ lọc tháng và năm

  3. SQL Server 2016 trên Linux

  4. SEC_CASE_SENSTIVE_LOGON trong 12c

  5. Cách tạo gói PL / SQL trong cơ sở dữ liệu Oracle