2017-02-14 5 views
7
SELECT c.cname 
FROM Customers c 
WHERE c.age > ALL (SELECT c2.age 
FROM Customers c2 
WHERE c2.type = 'snowboard'); 

SELECT c.cname 
FROM Customers c 
WHERE c.age > (SELECT MAX(c2.age) 
FROM Customers c2 
WHERE c2.type = 'snowboard') 

वे मेरे लिए समान दिखते हैं क्योंकि MAX (c2.age) कॉलम युग में सभी मानों की तुलना में अधिक या बराबर है और यदि c.age MAX से अधिक है (c2.age) तो यह सभी से अधिक है मान।निम्न SQL क्वेरी क्यों समकक्ष नहीं हैं?

+1

कृपया डीबीएमएस – McNets

उत्तर

10

यदि snowboard के लिए कोई मिलान नहीं है, तो पहले सभी पंक्तियां लौटाती हैं और दूसरा कोई भी रिटर्न नहीं देता है।

पहले के लिए तर्क "सभी" की बोलचाल परिभाषा का पालन करता है। यदि कोई मिलान नहीं है, तो सबकुछ उप-वर्ग से (अस्तित्वहीन) मान से अधिक है। नोट: यह NULL (कम से कम SQL सर्वर में) के भी सच है।

दूसरी क्वेरी NULL लौटाती है जब कोई मिलान नहीं होता है। असल में, NULL की तुलना कभी भी सच नहीं होती - ठीक है, कुछ अपवाद हैं। भविष्य के लिए

सुझाव:

  • NULL मूल्यों
  • शामिल है: यदि दो प्रश्नों देखो की तरह वे एक ही हैं, लेकिन एक ही मान नहीं है, तो दो में से एक आम तौर पर दोषी है
  • तालिकाओं में से एक खाली है
+0

ओहह लॉल टैग करें, इसे मिला। मुझे वह मध्य अवधि का गलत लगता है। मुझे लगता है कि उस प्रश्न की खामियों का पता लगाना उन छात्रों के लिए बहुत कठिन है जो 1 महीने के लिए एसक्यूएल का अध्ययन कर रहे हैं। – daniel

+0

आपके दावे को विस्तारित करने के लिए, एनयूएलएल की कोई भी तुलना UNKNOWN मान लौटाती है क्योंकि SQL तीन मान तर्क का उपयोग करता है। – daniel

+0

@ डैनियल। । । ।वह सही है। जाहिर है, हालांकि, 'NULL' एक मौजूदा मूल्य से अधिक है। उत्सुक, क्योंकि 'न्यूल> न्यूल' का मूल्यांकन 'न्यूल' तक होता है। –

संबंधित मुद्दे