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 b
và c
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
.