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

एसक्यूएल क्वेरी एक पंक्ति वापस करने के लिए, भले ही कम से कम पैरामीटर में नहीं मिली हो

आपको मानक जॉइन सिंटैक्स का उपयोग शुरू करना चाहिए। अधिक पठनीय होने के अलावा (कम से कम मेरी राय में) यह आपको आकस्मिक कार्टेशियन जॉइन से भी बचाता है यदि आप WHERE क्लॉज में वास्तविक जॉइन कंडीशन को भूल जाते हैं। साथ ही यह क्लंकी (+) . के विपरीत लगभग सभी DBMS में पोर्टेबल है Oracle द्वारा उपयोग किया गया सिंटैक्स (जिसमें कुछ सीमाएँ भी हैं जो JOIN सिंटैक्स में नहीं हैं)

यहां स्पष्ट (अंतर्निहित के बजाय) का उपयोग करके फिर से लिखी गई क्वेरी है:

SELECT DISTINCT ope.ope_operationid,
       ser.ser_code,
       opt.opt_code,
       ost.ost_code
FROM od_operation ope, 
   LEFT JOIN od_service_type ser ON ope.ser_id = ser.ser_id
   LEFT JOIN od_operation_type opt ON opt.opt_id = ope.opt_id
   LEFT JOIN od_status_type ost ON ost.ost_id = ope.ost_id
   LEFT JOIN od_equipment_type eqt ON ????????
WHERE ope.opt_id = 3781
AND   ope.ope_operationid = 'LAA351BP'

संपादित करें

od_equipment_type . पर शामिल न होने की स्थिति यही कारण है कि जॉइन सिंटैक्स को प्राथमिकता दी जाती है। यदि मूल SQL में अनुगामी अल्पविराम को हटा दिया जाता है, तो कथन एक अवांछित कार्टेशियन जॉइन बनाएगा जो सर्वर पर गंभीर प्रभाव डाल सकता है यदि शामिल टेबल बड़ी हैं।

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ट्रंक (दिनांक, 'आईडब्ल्यू') वास्तव में क्या करता है?

  2. Oracle:वर्ष -4713 और +9999 के बीच होना चाहिए, और 0 . नहीं होना चाहिए

  3. FRM-50026 दिनांक DD-MON-YYYY जैसे प्रारूप में दर्ज किया जाना चाहिए

  4. वेबलॉगिक सर्वर/अन्य संसाधनों पर किस जार में संभवतः वर्ग हो सकता है:oracle.security.jps.ee.http.JpsFilter?

  5. ALL_PROCEDURES दृश्य PROCEDURE_NAME नहीं दिखाता