Từ truy vấn của bạn (được định dạng có thể đọc được)
SELECT
table1.*,
tb21.year,
tb21.month,
tb21.day,
tb22.year,
tb22.month,
tb22.day
FROM
table1
LEFT JOIN table2 tb21
ON table1.year = tb21.year
AND table1.month = tb21.month
AND (tb21.day = table1.day
OR tb21.day = table1.day+1)
LEFT JOIN table2 tb22
ON table1.year = tb22.year
AND table1.month = tb22.month
AND (tb22.day = table1.day+2
OR tb22.day = table1.day+3)
Ngoài nội dung hạn chế của bạn được cung cấp, hãy xem bạn đang cố gắng so sánh dữ liệu từ ngày này sang ngày khác + 1, +2 và +3. Cũng giả sử cho ví dụ này, bạn chỉ có 10 ngày trong bảng được biểu thị là tất cả từ ngày 1 tháng 6 đến ngày 10 tháng 6 năm 2016 trong cả hai bảng Table1 VÀ Table2 của bạn.
Một lần nữa, đây là một giả định rằng mỗi bảng có tất cả 10 ngày được đề cập chỉ nhằm mục đích đơn giản là tại sao lại có nhiều bản ghi như vậy. Vì vậy, đối với Bảng 1 ngày 1 tháng 6 năm 2016, nó sẽ đủ điều kiện với bảng 2 (phiên bản tb21) và trả về HAI bản ghi. Một cho ngày 1 tháng 6 và một cho ngày 2 tháng 6. Vì vậy, bây giờ bạn có HAI bản ghi trong kết quả của mình. Bây giờ, bạn làm điều đó một lần nữa, tham gia trái vào bảng 2 (phiên bản tb22). Lần này bạn soi cầu 2 và 3 ngày ra, trong đó bạn có 3 và 4 tháng 6 trong bảng. Vì vậy, bạn đang nhận được một kết quả Descartes. Vì vậy, đối với bản ghi ngày 1 tháng 6 trong bảng 1, bây giờ bạn có 4 bản ghi như sau.
T1Year T1Month T1Day T21Day T22Day
2016 6 1 1 3
2016 6 1 1 4
2016 6 1 2 3
2016 6 1 2 4
Bây giờ, giả sử bảng 2 của bạn có 3 mục nhập vào ngày 2 tháng 6 và 3 mục nhập vào ngày 3 tháng 6 và dữ liệu của bạn sẽ cực kỳ phình to. Đây là lý do tại sao bạn cần giải thích rõ hơn về những gì bạn đang cố gắng thực hiện.
Vì vậy, không có ngữ cảnh thực sự về những gì bạn đang tìm kiếm, hãy bỏ qua thực tế là nó không tận dụng chỉ mục của bạn một cách hoàn hảo. Bạn có một HOẶC dựa trên ngày thông qua so sánh ngày. Dù sao thì nó vẫn sẽ được sử dụng cho truy vấn.