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ì.