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

एसक्यूएल:अन्य तालिका से समूह और उलटा परिणाम

PostgreSQL . में बहुत ही सरल और तेज़ DISTINCT ON . के साथ - मानक SQL नहीं इसलिए प्रत्येक RDBMS में उपलब्ध नहीं है।

प्रश्न में इसका उल्लेख नहीं है, लेकिन कोड उदाहरणों से व्युत्पन्न यह वास्तव में प्रत्येक प्राप्तकर्ता के लिए "अंतिम तिथि" वाली पंक्ति की तलाश कर रहा है किसी दिए गए author के लिए .

SELECT DISTINCT ON (r.recipient)  m.*
FROM   message   m
JOIN   recipient r ON r.m_id = m.id
WHERE  m.author = 1
ORDER  BY r.recipient, m.date DESC, r.m_id -- to break ties

विवरण के साथ-साथ कई SQL मानक विकल्प यहां:
हर ग्रुप बाय ग्रुप में पहली पंक्ति चुनें?

बुनियादी, मानक एसक्यूएल के साथ एक और समाधान। MySQL . सहित हर प्रमुख RDBMS के साथ काम करता है (चूंकि वह टैग जोड़ा गया है):

SELECT m.* 
FROM   message   m
JOIN   recipient r ON r.m_id = m.id
WHERE  m.author = 1
AND NOT EXISTS (
   SELECT 1
   FROM   message   m1
   JOIN   recipient r1 ON r1.m_id = m1.id
   WHERE  r1.recipient = r.recipient 
   AND    m1.author = 1
   AND    m1.date > m.date
   )

केवल नवीनतम दिनांक वाली पंक्ति NOT EXISTS . से गुजरती है विरोधी अर्ध-जुड़ना।



  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 EntityFrameworkCore के साथ काम न करें

  2. टीसीएल और मैसकल के साथ सांख्यिकी

  3. मैं MySQL धीमी क्वेरी लॉग को कैसे सक्षम करूं?

  4. Asp.Net MVC - डेटाबेस में एकाधिक पंक्तियों को सम्मिलित करना

  5. JOOQ के साथ तालिका से एनम वर्ग उत्पन्न करें