जाहिर है, आपके पास शामिल होने वाले दोनों कॉलमों के लिए डुप्लिकेट मान हैं। कार्टेशियन उत्पाद के बजाय एक [INNER] JOIN
इसके लिए उत्पादन करेंगे, आप चाहते हैं कि प्रत्येक पंक्ति का उपयोग केवल एक बार किया जाए . आप इसे एक पंक्ति संख्या जोड़कर प्राप्त कर सकते हैं (rn
) प्रति डुप्लीकेट और rn
. पर शामिल हों इसके अतिरिक्त।
प्रत्येक तालिका में दूसरे की तुलना में समान मूल्य के लिए अधिक या कम डुप्ली हो सकते हैं जब तक कि आपके पास अतिरिक्त प्रतिबंध न हों (जैसे एफके बाधा) - लेकिन आपके प्रश्न में कुछ भी नहीं है। सभी रखने के लिए पंक्तियों में से कोई एक FULL [OUTER] JOIN
का उपयोग करेगा . लेकिन आप परिणाम में 10000 रिकॉर्ड रखना चाहते हैं, जो कि table2
. की कार्डिनैलिटी है . तो यह एक LEFT [OUTER] JOIN
table1
. पर (40 पंक्तियों के साथ) - और table1
. से संभावित अत्यधिक पंक्तियों को बाहर करें ।
SELECT t1."LocationArea", t2."Location"
FROM (
SELECT "Location"
, row_number() OVER (PARTITION BY "Location") AS rn
FROM table2
) t2
LEFT JOIN (
SELECT "LocationArea"
, row_number() OVER (PARTITION BY "LocationArea") AS rn
FROM table1
) t1 ON t1."LocationArea" = t2."Location"
AND t1.rn = t2.rn;
Postgres या SQL सर्वर के लिए काम करता है। MySQL विंडो फ़ंक्शंस का समर्थन नहीं करता है, आपको एक विकल्प की आवश्यकता होगी:
- एसक्यूएल चयन सीमित किए बिना अंतिम प्रविष्टि
स्पष्ट होने के लिए:LEFT JOIN
LEFT OUTER JOIN
के लिए सिर्फ शॉर्टहैंड है , इसलिए आप पहले से ही बाहरी जुड़ाव का उपयोग कर रहे हैं। आपका कथन एक गलतफहमी है :
मैं ज़ोहो रिपोर्ट का उपयोग कर रहा हूँ जो बाहरी जुड़ाव का समर्थन नहीं करता है।