Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एकाधिक बाएं योग के साथ जुड़ें

आपके डेटा और योग के चल रहे कार्टेशियन परिणाम के कारण समस्या हो सकती है। बस स्पष्ट करने के लिए, यहाँ एक सरल प्रश्न है... मुझे पता है कि मेरे पास यह सब नहीं है, न ही कॉलम में शामिल हों, यह केवल स्पष्टीकरण के लिए है।

इसके अलावा, मुझे पता है कि मैंने जो कुछ भी आप सामना कर रहे हैं उसकी अवधारणा को सरलीकृत पढ़ने और समझने के लिए मैंने कॉलम और उपनामों को संक्षिप्त कर दिया है।

Select
      t1.yr,
      sum( t2.Amt ) as AmtChange
   FROM 
      budget AS t1
         LEFT JOIN Budget_Changes AS t2
            on t1.yr = t2.Yr

अंत में, कोई बात नहीं ... किसी दिए गए वर्ष के लिए, आपको दूसरी तालिका से योग मिलेगा। तालिका 2 में कई रिकॉर्ड हैं। उदाहरण:डेटा

Budget
Yr
2013
2014

Budget_Changes
Yr    Amt
2013  10
2013  20
2013  30
2014  40
2014  50

Your results would be
Yr    AmtChange
2013  60
2014  90

हम शायद इस बिंदु पर सहमत हैं ... अब, एक अन्य तालिका में फेंक दें कि प्रति वर्ष (या जो कुछ भी), वह भी प्रति वर्ष कई रिकॉर्ड है...

Change_Orders
Yr     COAmt
2013   100
2013   120
2014   200
2014   220

और आप इसे सेकेंडरी लेफ्ट-जॉइन के रूप में अपनी क्वेरी में जोड़ते हैं, कुछ इस तरह

Select
      t1.yr,
      sum( t2.Amt ) as AmtChange,
      sum( t3.COAmt ) as COAmtChange
   FROM 
      budget AS t1
         LEFT JOIN Budget_Changes AS t2
            on t1.yr = t2.Yr
         LEFT JOIN Change_Orders AS t3
            on t1.yr = t3.Yr


Your might expect the results to be
Yr    AmtChange  COChangeAmt
2013  60         220
2014  90         420

हालांकि, चूंकि यह एक कार्टेशियन परिणाम है... प्रत्येक जॉइन के लिए कई पंक्तियाँ परिणाम ले रही हैं TIMES प्रत्येक प्रविष्टि जो अन्य तालिका में मौजूद है... कुछ इस तरह

Yr    AmtChange  COChangeAmt
2013  120         440
2014  180         840

इसे ठीक करने के लिए, प्रत्येक व्यक्तिगत तालिका जिससे आप उप-योग प्राप्त कर रहे हैं, को अपने आप ही संभाला जाना चाहिए, और अपने स्वयं के वर्ष के आधार पर समूहीकृत किया जाना चाहिए ताकि सबसेट डेटा के प्रति संदर्भ में केवल एक पंक्ति लौटाए। कुछ इस तरह

Select
      t1.yr,
      t2.AmtChange,
      t3.COAmtChange
   FROM 
      budget AS t1
         LEFT JOIN ( select BC.Yr, sum( BC.Amt ) as AmtChange
                        from Budget_Changes BC
                        group by BC.Yr ) t2
            on t1.yr = t2.Yr
         LEFT JOIN ( select CO.Yr, sum( CO.COAmt ) as COAmtChange
                        from Change_Orders CO
                        group by CO.Yr ) AS t3
            on t1.yr = t3.Yr

इसलिए, उप-प्रश्नों में से प्रत्येक संबंधित वर्ष के लिए केवल 1 रिकॉर्ड लौटाएगा और इस प्रकार योग () राशियों में डुप्लिकेट को रोकेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django कोड या MySQL ट्रिगर

  2. जब मैं स्कीमा पूछता हूं तो MySQL उतार-चढ़ाव वाली पंक्ति गणना देता है?

  3. चयन के साथ सम्मिलित करें

  4. जहां और या . का उपयोग करके हटाएं

  5. hql . में स्ट्रिंग बाएं फ़ंक्शन का उपयोग कैसे करें