trái tham gia hai bảng với điều kiện where
Nó thường sai để sử dụng LEFT [OUTER] JOIN
và sau đó lọc bằng WHERE
điều kiện, do đó làm vô hiệu tính năng đặc biệt của LEFT JOIN
để bao gồm tất cả các hàng từ bảng bên trái vô điều kiện . Giải thích chi tiết:
- Giải thích chi tiết hơn về đề xuất hiệu suất điều kiện JOIN so với LEFT JOIN và WHERE
Đặt các điều kiện phải lọc tất cả các hàng vào WHERE
mệnh đề (rid = 2
), nhưng tạo điều kiện cho các hàng nối bên trái từ record_table
điều kiện tham gia thực tế:
SELECT t.start_date, t.end_date -- adding those
, r.id, r.name, r.date
FROM time_table t
LEFT JOIN record_table r ON r.date >= t.start_date
AND r.date < t.end_date
WHERE t.rid = 2;
Như đã nhận xét, thật hợp lý khi bao gồm các cột từ time_table
trong kết quả, nhưng đó là phần bổ sung tùy chọn của tôi.
Bạn cũng cần phải hiểu rõ về giới hạn dưới và giới hạn trên . Quy ước chung là bao gồm thấp hơn và loại trừ giới hạn trên về thời gian (timestamp
) các dãy. Do đó, việc sử dụng >=
của tôi và <
ở trên.
Có liên quan:
- Truy vấn SQL trên một chuỗi thời gian để tính giá trị trung bình
- Chọn mức trung bình của các bản ghi được nhóm theo khoảng thời gian 5 phút
Hiệu suất sẽ không có vấn đề gì với các chỉ mục phù hợp. Bạn cần một chỉ mục (hoặc PK) trên time_table(rid)
và một cái khác trên record_table(date)
.