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

MySQL में किसी तालिका से एकल पंक्ति में शामिल हों

यह स्टैक ओवरफ़्लो पर अक्सर आने वाली सबसे बड़ी-एन-प्रति-समूह समस्या है।

यह रहा मेरा सामान्य उत्तर:

select
  p.name        player,
  s.date        first_score,
  s.points      points

from  players p

join  scores  s
  on  s.player_id = p.id

left outer join scores  s2
  on  s2.player_id = p.id
      and s2.date < s.date

where
  s2.player_id is null

;

दूसरे शब्दों में, दिया गया स्कोर s, उसी खिलाड़ी के लिए स्कोर s2 खोजने का प्रयास करें, लेकिन पहले की तारीख के साथ। अगर पहले का कोई स्कोर नहीं मिलता है, तो s सबसे पहला स्कोर है।

संबंधों के बारे में अपनी टिप्पणी दें:आपके पास एक नीति होनी चाहिए जिसके लिए टाई के मामले में उपयोग किया जा सके। एक संभावना यह है कि यदि आप ऑटो-इंक्रिमेंटिंग प्राथमिक कुंजी का उपयोग करते हैं, तो कम से कम मूल्य वाला पहला वाला होता है। नीचे बाहरी जुड़ाव में अतिरिक्त शब्द देखें:

select
  p.name        player,
  s.date        first_score,
  s.points      points

from  players p

join  scores  s
  on  s.player_id = p.id

left outer join scores  s2
  on  s2.player_id = p.id
      and (s2.date < s.date or s2.date = s.date and s2.id < s.id)

where
  s2.player_id is null

;

मूल रूप से आपको टाईब्रेकर शब्द जोड़ने की जरूरत है जब तक कि आप एक ऐसे कॉलम तक नहीं पहुंच जाते जो अद्वितीय होने की गारंटी है, कम से कम दिए गए खिलाड़ी के लिए। तालिका की प्राथमिक कुंजी अक्सर सबसे अच्छा समाधान होता है, लेकिन मैंने ऐसे मामले देखे हैं जहां एक और कॉलम उपयुक्त था।

मेरे द्वारा @OMG Ponies के साथ साझा की गई टिप्पणियों के संबंध में, याद रखें कि इस प्रकार की क्वेरी सही अनुक्रमणिका से अत्यधिक लाभान्वित होती है।



  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 में NULL हैंडलिंग जो केवल डेटा परिवर्तन पर सक्रिय होती है

  2. mysql में utf-8 mb4 कैरेक्टर (ios5 में इमोजी) कैसे डालें?

  3. क्या किसी तालिका में एकाधिक प्राथमिक कुंजी हो सकती हैं?

  4. PHP + MySQL कतार

  5. सत्र और सत्र डेटा संग्रहीत करने के लिए कौन सा MySQL डेटाबेस इंजन बेहतर है:MyISAM या InnoDB?