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

Oracle, Kết nối bằng rownum

Lời giải thích trong câu trả lời của Krokodilko đơn giản là sai. Bạn có thể bỏ qua dấu "Câu trả lời đúng" và vô số phiếu tán thành, nó vẫn sai. Điều thú vị là anh ấy đã để lại như một bài tập chính xác là trường hợp chứng minh lời giải thích là sai.

CONNECT BY truy vấn không hoạt động "như thể" bảng mới (hoặc tập hợp hàng đầu ra mới của SELECT câu lệnh, dù sao) được tạo ở mỗi bước. Đây là sai lầm trong lập luận.

Đúng hơn, chỉ có một tập hợp hàng được tạo tổng thể (qua tất cả các bước). Đúng là các hàng mới được thêm vào dựa trên các hàng được tạo ở bước trước đó; nhưng bản thân bộ hàng là một và đang phát triển, không phải bộ hàng riêng biệt.

Điều này đặc biệt liên quan đến ROWNUM . ROWNUM được gán cho các hàng trong một tập hợp hàng "kết quả", bắt đầu bằng 1. Trong CONNECT BY truy vấn, chỉ có một bộ hàng và ROWNUM đi từ 1 đến n theo một trình tự tăng dần.

Nếu câu trả lời của Krokodilko là đúng, thì ROWNUM sẽ khởi động lại ở 1 ở mỗi bước. Rõ ràng đây không phải là trường hợp:hãy thử nó trên một truy vấn phân cấp "chuẩn".

select     empno, ename, mgr, level, rownum
from       scott.emp
start with mgr is null
connect by prior empno = mgr
;

     EMPNO ENAME             MGR      LEVEL     ROWNUM
---------- ---------- ---------- ---------- ----------
      7839 KING                           1          1
      7566 JONES            7839          2          2
      7788 SCOTT            7566          3          3
      7876 ADAMS            7788          4          4
      7902 FORD             7566          3          5
      7369 SMITH            7902          4          6
      7698 BLAKE            7839          2          7
      7499 ALLEN            7698          3          8
      7521 WARD             7698          3          9
      7654 MARTIN           7698          3         10
      7844 TURNER           7698          3         11
      7900 JAMES            7698          3         12
      7782 CLARK            7839          2         13
      7934 MILLER           7782          3         14



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàng đến cột trong ORACLE

  2. Chế độ xem cụ thể hóa với Oracle

  3. Oracle tương đương với MySQL CHÈN BỎ QUA?

  4. SQL. Làm thế nào để tham chiếu một khóa chính tổng hợp Oracle?

  5. Làm cách nào để chèn dấu thời gian trong Oracle?