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

Các dấu ngoặc đơn lồng nhau trong mệnh đề FROM Cú pháp Oracle SQL có hợp lệ không?

Cú pháp hợp pháp để sử dụng dấu ngoặc đơn trong mệnh đề tham gia trong FROM và dấu ngoặc đơn do có ảnh hưởng.

Hãy xem xét truy vấn này:

WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
     table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
     table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
SELECT a.id, b.id, c.id
FROM   table_a a left join ( table_b b inner join table_c c ON c.id = b.id ) ON b.id = a.id 
ORDER BY 1,2,3;

Dấu ngoặc đơn cho phép bạn thực hiện phép nối bên trong các bảng bc và sau đó nối bên ngoài thành a .

Nếu không có dấu ngoặc đơn, cố gắng diễn đạt điều đó như một phép nối trái sẽ là không thể. Bạn sẽ không nhận được hàng 11-30 từ bảng a hoặc các hàng khác từ 11-20 của bảng c sẽ là null s (tùy thuộc vào cách bạn đã cố gắng thực hiện).

Lưu ý rằng truy vấn trên tương đương với:

WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
     table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
     table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
SELECT a.id, b.id, c.id
FROM   table_b b inner join table_c c on c.id = b.id right join table_a a on a.id = b.id 
ORDER BY 1,2,3;

, không yêu cầu dấu ngoặc đơn. Vì vậy, nếu bạn thực sự muốn tránh sử dụng dấu ngoặc đơn trong FROM , bạn thường có thể làm như vậy. Cá nhân tôi thích LEFT JOIN phương thức có dấu ngoặc đơn thay vì RIGHT JOIN .



  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 để lấy sự kiện tiếp theo khi giá trị thay đổi?

  2. Có cách nào để sử dụng Linq với Oracle không

  3. Tạo lại Oracle Databse từ các tệp .dbf sau khi cài đặt lại Oracle Enterprise 11gR2

  4. thư mục oradiag_ <user> là gì?

  5. oracle ::occi ::ResultSet ::next () làm hỏng chương trình của tôi