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

यदि मान मौजूद नहीं है तो केवल पंक्ति लौटाएं

SELECT *
FROM reservation
WHERE id NOT IN (select reservation_id
                 FROM reservation_log
                 WHERE change_type = 'cancel')

या:

SELECT r.*
FROM reservation r
LEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel'
WHERE l.id IS NULL

पहला संस्करण अधिक सहज है, लेकिन मुझे लगता है कि दूसरे संस्करण को आमतौर पर बेहतर प्रदर्शन मिलता है (यह मानते हुए कि आपके पास शामिल होने में उपयोग किए गए कॉलम पर इंडेक्स हैं)।

दूसरा संस्करण काम करता है क्योंकि LEFT JOIN पहली तालिका में सभी पंक्तियों के लिए एक पंक्ति देता है। जब ON शर्त सफल होती है, उन पंक्तियों में दूसरी तालिका के कॉलम शामिल होंगे, जैसे INNER JOIN . जब शर्त विफल हो जाती है, तो लौटाई गई पंक्ति में NULL होगा दूसरी तालिका के सभी स्तंभों के लिए। WHERE l.id IS NULL test फिर उन पंक्तियों से मेल खाता है, इसलिए यह उन सभी पंक्तियों को ढूंढता है जिनका तालिकाओं के बीच कोई मेल नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel OrderBy रिलेशनशिप काउंट

  2. MySQL बड़े डेटाबेस से डुप्लिकेट को जल्दी से हटा देता है

  3. MySQL में MIN() बनाम LEAST():क्या अंतर है?

  4. स्केलग्रिड डीबीएएएस एडब्ल्यूएस क्लाउड के माध्यम से MySQL होस्टिंग सेवाओं का विस्तार करता है

  5. डेटा के दो सेट को दो अलग-अलग जहां क्लॉज के साथ वापस करने की आवश्यकता है