मैं एक iSeries पर एक sql स्टेटमेंट चलाने की कोशिश कर रहा हूं जो मेरे द्वारा पास किए गए टाइप पैरामीटर के आधार पर रेटल्स को आउटपुट करेगा।
बस कहें कि mytable में फ़ील्ड 1 नामक फ़ील्ड है। फ़ील्ड 1 में Y, N और NULL मान हैं।
एक प्रकार का 'Y' केवल 'Y' मान लौटाना चाहिए। 'एन' का एक प्रकार 'वाई' मान नहीं लौटाना चाहिए। (अर्थात शून्य, एन और क्षेत्र में कोई अन्य कबाड़)
मैंने यह कोशिश की ...
select *
from mytable
where field1 in case when :type = 'Y' then 'Y'
else (select field1 from mytable where field1 <> 'Y') end
हालाँकि, यह काम नहीं करता है।
1 उत्तर
मेरा मानना है कि आप जिस तर्क की तलाश कर रहे हैं वह यह है:
SELECT *
FROM myTable
WHERE (:type = 'Y' AND field1 IS NOT null AND field1 = 'Y')
OR (:type <> 'Y' AND (field1 IS null OR field1 <> 'Y'))
(इस तथ्य को ध्यान में रखें कि शॉर्ट-सर्किट लॉजिक SQL के साथ गारंटीकृत नहीं है...)
याद रखें कि null
वास्तव में किसी भी चीज़ से तुलना नहीं करता है, और इस तथ्य को बताना सबसे अच्छा है कि आप वास्तव में इसे चाहते हैं (दूसरे मामले में)।
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।