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

तीन तालिकाओं के साथ जुड़ने का उपयोग करना जब कोई फ़ील्ड शून्य हो सकता है

आप एक इनर जॉइन कर रहे हैं, लेकिन आपको एक बाहरी जॉइन की आवश्यकता है, विशेष रूप से, एक लेफ्ट जॉइन। LEFT JOIN के साथ, "बाईं ओर" तालिका हमेशा जुड़ती है, और यदि कोई पत्राचार नहीं है तो दाईं ओर की तालिका के फ़ील्ड शून्य पर सेट हो जाते हैं। इस अंतर को इस विकिपीडिया पेज में बहुत अच्छे से समझाया गया है ।

फिर आपको पंक्तियों को एक ही सबमिशन आईडी के साथ समूहित करना होगा और गिनना होगा कि कितनी पंक्तियों को समूहीकृत किया गया है, इस बात का ध्यान रखते हुए कि यदि एक सबमिशन में केवल एक टिप्पणी है और दूसरे में कोई नहीं है, तो दोनों में 1 समूहीकृत पंक्ति है ... यदि एक सबमिशन में कोई टिप्पणी नहीं है , अगली क्वेरी में c.submissionid शून्य होगा, इसलिए

आपका एसक्यूएल हो सकता है

SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid, 
IF(c.submissionid IS NULL, 0, COUNT(*))  AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. गैर-अंग्रेज़ी वर्ण मेरे PHP पृष्ठ पर प्रश्न चिह्न के रूप में दिखाई देते हैं - डेटाबेस में ठीक दिखाई देते हैं

  2. न आया हुआ अपवाद 'पीडीओएक्सप्शन' संदेश के साथ 'कोई सक्रिय लेनदेन नहीं है'?

  3. InnoDB की वैकल्पिक तालिका के लिए MySQL का अनुकूलन

  4. एक ही कॉलम पर कई WHERE शर्तों के साथ चयन करना

  5. MySQL इनोडब क्रैश