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

ओरेकल इंडेक्स को बाइंड और नल वैल्यू के साथ हिट करने के लिए सबसे अच्छी क्वेरी

आप यह देखने के लिए कॉलम और मान की तुलना कर सकते हैं कि दोनों शून्य हैं या नहीं; या दोनों शून्य और बराबर नहीं हैं:

SELECT * FROM MYTABLE 
WHERE ((A is null and :1 is null) or A = :1) 
  AND ((B is null and :2 is null) or B = :2) 
  AND ((C is null and :3 is null) or C = :3) 
  AND ((D is null and :4 is null) or D = :4) 
  AND ((E is null and :5 is null) or E = :5) 

जो बहुत सुंदर नहीं है लेकिन काम करना चाहिए। जैसा कि आप पहले से ही जानते हैं कि आप शून्य के विरुद्ध समानता के साथ मूल्यों की तुलना नहीं कर सकते, केवल is ऑपरेटर।

आपके क्लाइंट सॉफ़्टवेयर के आधार पर आप बाइंडिंग को दोहराने से बचने के लिए नामित बाइंड चर का उपयोग करने में सक्षम हो सकते हैं; यदि नहीं, तो आप एक सबक्वायरी या सीटीई का उपयोग कर सकते हैं जो बाइंड लेता है और फिर उन्हें मुख्य क्वेरी में उपयोग करता है। कुछ इस तरह:

WITH CTE AS (
  SELECT :1 AS val_1, :2 AS val_2, :3 AS val_3, :4 AS val_4, :5 AS val_5
  FROM DUAL
)
SELECT MT.*
FROM CTE
JOIN MYTABLE MT
  ON ((MT.A is null and CTE.val_1 is null) or MT.A = CTE.val_1) 
 AND ((MT.B is null and CTE.val_2 is null) or MT.B = CTE.val_2) 
 AND ((MT.C is null and CTE.val_3 is null) or MT.C = CTE.val_3) 
 AND ((MT.D is null and CTE.val_4 is null) or MT.D = CTE.val_4) 
 AND ((MT.E is null and CTE.val_5 is null) or MT.E = CTE.val_5) 

गॉर्डन का फ़ंक्शन-आधारित इंडेक्स दृष्टिकोण अधिक विश्वसनीय और समझने में आसान हो सकता है, जब तक कि आपके पास वास्तव में जादुई मान शून्य वाला कोई कॉलम नहीं हो सकता है। (मैं आपके प्रश्न में भी उस पंक्ति से चूक गया था और यह महसूस नहीं किया था कि आप इसे पहले ही छूट दे चुके हैं!)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL डेवलपर में किसी तालिका में टिप्पणियाँ कैसे जोड़ें?

  2. Oracle में SQL क्वेरी ट्यूनिंग

  3. ओरेकल में अग्रणी शून्य के साथ मान प्रदर्शित नहीं हो रहे हैं

  4. वैसे भी एक प्रमुख संस्करण क्या है?

  5. ऑरैकल में सीडीएटीए के अंदर डेटा का विश्लेषण कैसे करें