2012-09-29 38 views
19

Với 3 cách sau đây tham giaTham gia để tuyên bố về hoạt động

select t1.* from t1 
left join t2 on t1.fk = t2.pk 
join t3 on t2.fk = t3.pk 

Nếu tham gia giữa t2 và t3 thất bại, hàng từ thành công sẽ tham gia giữa t1 và t2 được trả lại? Nếu thứ tự của hoạt động đi từ trái sang phải, tôi giả sử không, nhưng nếu nó được đánh giá từ phải sang trái (t3 được nối với t2 trước) thì t1 sẽ vẫn được trả lại ngay cả khi trước đó không thành công.

Tính năng này hoạt động như thế nào?

Trả lời

35

Vị trí của các điều khoản ON kiểm soát số lôgic lôgic đánh giá.

Vì vậy, trước tiên, t1 LEFT JOIN t2 ON t1.fk = t2.pk xảy ra. Kết quả của việc kết hợp này là một bảng ảo chứa tất cả các hàng phù hợp từ t1, t2 và (bởi vì nó là một kết nối bên ngoài bên trái) bất kỳ hàng nào không phù hợp t1 hàng cũng được giữ nguyên với giá trị null cho các cột t2.

Bảng ảo này sau đó tham gia vào lần tham gia tiếp theo. JOIN t3 ON t2.fk = t3.pk

Bất kỳ t2 bản ghi nào không khớp với hàng trong t1 không phải là một phần của đầu ra bảng ảo từ giai đoạn đầu tiên sẽ không xuất hiện trong kết quả cuối cùng. Ngoài ra, tham gia bên trong này trên t2.fk = t3.pk sẽ mất bất kỳ giá trị NULL nào của t2.fk chuyển toàn bộ nội dung của bạn trở lại thành các kết nối bên trong.

Xử lý truy vấn hợp lý được giải thích rõ ràng by Itzik Ben Gan here

+0

Trả lời đúng và rất toàn diện trong phần giải thích. Cảm ơn bạn vì sự giúp đỡ. – Alwyn

+0

Lời giải thích tuyệt vời và dễ dàng tôi tự hỏi liệu thứ tự hoạt động có áp dụng cho 'sqlite' không? –

+0

@MuhammadBabar - Tôi đã không sử dụng SQLLite nhưng nếu nó tuân theo tiêu chuẩn (ANSI/ISO) SQL nó sẽ. –

Các vấn đề liên quan