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

MySQL सबक्वेरी - लेफ्ट जॉइन में केवल पहला रिकॉर्ड खोजें

यह greatest-n-per-group है समस्या, जिसे स्टैक ओवरफ़्लो पर अक्सर पूछा जाता है।

यहां बताया गया है कि मैं इसे आपके परिदृश्य में कैसे हल करूंगा:

SELECT m.memberid, m.membername, m.gender, mp.phone, mh.loggedtime, mh.ipaddy
FROM tbl_members m 
INNER JOIN tbl_members_phones mp ON m.defaultphoneid = mp.phoneid
INNER JOIN tbl_members_addresses ma ON m.defaultaddressid = ma.addressid
LEFT OUTER JOIN tbl_members_login_history mh ON m.memberid = mh.memberid
LEFT OUTER JOIN tbl_members_login_history mh2 ON m.memberid = mh2.memberid
    AND mh.pk < mh2.pk
WHERE mh2.pk IS NULL;

यानी हमें mh चाहिए दिए गए सदस्य के लिए tbl_member_login_history में सबसे हाल की पंक्ति होने के लिए। इसलिए हम दूसरी पंक्ति खोजते हैं mh2 यह और भी ताजा है। यदि mh . से अधिक हाल ही में कोई नहीं पंक्ति मिलती है, फिर mh2.* NULL होगा, इसलिए mh नवीनतम होना चाहिए।

मुझे लगता है कि इस तालिका में प्राथमिक कुंजी कॉलम है जिसमें बढ़ते मान शामिल हैं। इस उदाहरण के लिए, मुझे लगता है कि कॉलम का नाम pk है ।

दोनों के लिए LEFT OUTER JOIN का उपयोग करना लॉगिन इतिहास तालिका के संदर्भ का अर्थ है कि m कोई मिलान पंक्ति न होने पर भी पंक्ति की सूचना दी जाएगी।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL बनाम MongoDB

  2. मैसकल में मानव तिथि को यूनिक्स टाइमस्टैम्प में कैसे परिवर्तित करें?

  3. MySQL तालिका विभाजन महीने के अनुसार

  4. त्रुटि:mysqlnd पुराने असुरक्षित प्रमाणीकरण का उपयोग करके MySQL 4.1+ से कनेक्ट नहीं हो सकता

  5. SQL क्वेरी एकाधिक तालिकाओं, एकाधिक जुड़ने और अल्पविराम से अलग सूची के साथ कॉलम फ़ील्ड के साथ