आपकी क्वेरी से (पठनीयता स्वरूपित)
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)
आपके द्वारा प्रदान की गई प्रतिबंधात्मक सामग्री के अलावा, आइए देखें कि आप उसी दिन के डेटा की तुलना + 1, +2 और +3 से करने का प्रयास कर रहे हैं। आइए यह भी मान लें कि इस उदाहरण के लिए आपके पास तालिका 1 और तालिका 2 दोनों तालिकाओं में 1 जून - 10 जून, 2016 के रूप में दर्शाई गई तालिका में केवल 10 दिन हैं।
फिर, यह एक धारणा है कि प्रत्येक तालिका में सभी 10 तिथियां हैं, केवल सरल उद्देश्यों के लिए कि इतने सारे रिकॉर्ड क्यों हैं। तो, 1 जून 2016 की तालिका 1 तिथि के लिए, यह तालिका 2 (tb21 संस्करण) के साथ योग्य होगी और दो रिकॉर्ड लौटाएगी। एक 1 जून के लिए और दूसरा 2 जून के लिए। तो अब आपके परिणाम में दो रिकॉर्ड हैं। अब, आप इसे फिर से बाएं-तालिका 2 (tb22 संस्करण) में शामिल करें। इस बार आप 2 और 3 दिनों की तलाश कर रहे हैं, जिनमें से आपके पास तालिका में 3 और 4 जून हैं। तो आपको कार्टेशियन परिणाम मिल रहा है। तो, तालिका 1 में 1 जून के रिकॉर्ड के लिए, अब आपके पास निम्नानुसार 4 रिकॉर्ड हैं।
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
अब, मान लें कि आपकी तालिका 2 में 2 जून को 3 प्रविष्टियाँ हैं और 3 जून को 3 प्रविष्टियाँ हैं और आपका डेटा सुपर ब्लोट में जा रहा है। यही कारण है कि आप जो करने का प्रयास कर रहे हैं उस पर आपको अधिक स्पष्टीकरण देने की आवश्यकता है।
इसलिए, आप जो खोज रहे हैं उस पर सही संदर्भ न रखते हुए, इस तथ्य को अनदेखा करें कि यह आपके सूचकांक का पूरी तरह से उपयोग नहीं कर रहा है। आपके पास दिन की तुलना के आधार पर एक OR है। इसे अभी भी किसी भी तरह क्वेरी के लिए उपयोग करना चाहिए।