De su consulta (formato de legibilidad)
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)
Aparte del contenido restrictivo proporcionado, mirémoslo tratando de comparar los datos del mismo día a día + 1, +2 y +3. Supongamos también que solo para este ejemplo tiene solo 10 días en la tabla representados como todos del 1 de junio al 10 de junio de 2016 en sus tablas Table1 Y Table2.
Una vez más, esto es una suposición de que cada tabla tiene las 10 fechas en cuestión solo para propósitos simplistas de por qué tantos registros. Entonces, para la fecha de la Tabla 1 del 1 de junio de 2016, calificará con la tabla 2 (versión tb21) y devolverá DOS registros. Uno para el 1 de junio y otro para el 2 de junio. Ahora tiene DOS registros en su resultado. Ahora, haga eso nuevamente, únase a la izquierda a la tabla 2 (versión tb22). Esta vez está buscando 2 y 3 días, de los cuales tiene el 3 y 4 de junio en la tabla. Así que estás obteniendo un resultado cartesiano. Entonces, para el registro del 1 de junio en la tabla 1, ahora tiene 4 registros de la siguiente manera.
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
Ahora, digamos que su tabla 2 tiene 3 entradas el 2 de junio y 3 entradas el 3 de junio y sus datos se van a inflar. Es por eso que necesita proporcionar más aclaraciones sobre lo que está tratando de hacer.
Por lo tanto, al no tener un contexto real sobre lo que está buscando, ignore el hecho de que no está utilizando perfectamente su índice. Tiene un OR basado en la fecha a través de las comparaciones de días. Debería seguir utilizándose para la consulta de todos modos.