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

Tham gia bên ngoài Oracle (+) và các giá trị không đổi

Tôi sẽ giải thích điều này bằng cách sử dụng cú pháp "ANSI JOIN" tương đương:

Tùy chọn 1

SELECT *
FROM TXN
LEFT JOIN CHK 
  ON TXN.CHK_ID = CHK.CHK_ID
WHERE TXN.CURRENT = 'Y'
AND CHK.CURRENT = 'Y'

Tùy chọn 2

SELECT *
FROM TXN
LEFT JOIN CHK 
  ON TXN.CHK_ID = CHK.CHK_ID 
  AND CHK.CURRENT = 'Y'
WHERE TXN.CURRENT = 'Y'

Như bạn có thể thấy, trong tùy chọn 1, các vị từ cố định của bạn được áp dụng sau LEFT JOIN biểu thức bảng được chỉ định, tức là trên kết quả của LEFT JOIN .

Trong tùy chọn 2, một trong các vị từ hằng của bạn là một phần của LEFT JOIN biểu thức.

Làm thế nào để LEFT JOIN làm việc?

Ý tưởng về LEFT JOIN là nó sẽ trả về tất cả các hàng từ LEFT bên của JOIN biểu thức, bất kể có một hàng phù hợp ở phía bên kia hay không, với vị từ nối. Vì vậy, trong tùy chọn 2, bất kể bạn có tìm thấy một hàng trong CHK hay không với CURRENT = 'Y' cho một hàng trong TXN , hàng trong TXN vẫn được trả lại. Đây là lý do tại sao bạn nhận được nhiều hàng hơn trong tùy chọn 2.

Ngoài ra, ví dụ này sẽ giải thích lý do tại sao bạn nên thích cú pháp "ANSI JOIN". Từ quan điểm bảo trì / khả năng đọc, rõ ràng hơn nhiều là truy vấn của bạn đang làm gì.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn mảng byte [] dưới dạng đốm màu trong Cơ sở dữ liệu Oracle nhận ORA-01460:yêu cầu chuyển đổi chưa thực hiện hoặc không hợp lý

  2. sử dụng foreach để thực hiện chèn hàng loạt với mybatis

  3. Cập nhật bằng cách sử dụng Tham gia - Đa DB / Bảng

  4. Lỗi SQL:ORA-14006:tên phân vùng không hợp lệ

  5. Tại sao Oracle trả về chuỗi cụ thể nếu các giá trị 'orderby' giống nhau?