2013-03-01 8 views
5

में 1 = 2 का उपयोग किसी को कृपया नीचे दिए गए SQL क्वेरी में '1 = 2' का अर्थ समझाएं।SQL क्वेरी

SELECT E.EmpID, 
     E.EmpName, 
     Country = CASE 
        WHEN T.Active = 'N' 
         AND 1 = 2 THEN 'Not Working Anymore' 
        ELSE C.Country_Name 
       END, 
     T.Contract_No 
FROM Employees E (nolock) 
     INNER JOIN Contract T 
     ON T.Contract_No = E.Contract_No 
     LEFT JOIN Country C (nolock) 
     ON E.Country_ID = C.Country_ID 

धन्यवाद

संपादित करें: - मामूली गलती उदाहरण एसक्यूएल मेरे द्वारा दी गई क्वेरी में ही अस्तित्व में सही किया। @ सभी: - यहां वर्णित क्वेरी एक बड़ी कामकाजी क्वेरी का एक उदाहरण संस्करण है जिस पर मुझे कुछ पुनः प्राप्त करना है। मैंने प्रश्न की सादगी के लिए एसक्यूएल क्वेरी का नमूना परिदृश्य बनाया है।

+1

यह हमेशा गलत होता है। किसी ने शायद इसे परीक्षण के लिए जोड़ा और इसे बाहर निकालना भूल गया। – Narnian

+0

@a_horse_with_no_name: यह '1 = 2' उस खंड में नहीं है जहां धारा – Andomar

+0

इस मामले में यह सुनिश्चित करता है कि 'केस' का पहला भाग कभी भी सत्य नहीं हो सकता है, इसलिए यह हमेशा' else' के माध्यम से जाएगा। हो सकता है कि अस्थायी परीक्षण कोड जिसे हटा दिया जाना चाहिए या टिप्पणी करने के बदले में होना चाहिए? –

उत्तर

5
when T.Active = 'N' and 1=2 then 'Not Working Anymore' 

सरल, उपर्युक्त स्थिति कभी भी true नहीं बन जाएगी। तो परिणाम हमेशा रहेंगे C.Country_Name

3

यह एक गलत तर्क के अनुरूप है।

उदाहरण के लिए;

select * from TABLE where 1=2 

शून्य पंक्तियां देता है।

1

उपयोग WHERE 1=2 अगर आप

1=2 हमेशा की false है नहीं किसी भी पंक्तियों को पुनः प्राप्त करना चाहते हैं ,।

1

जोड़ना और 1 = 2 उस मामले को हमेशा झूठी वापसी का कारण बन जाएगा। यह पता लगाने के लिए कि वहां क्यों है, उस व्यक्ति से पूछें जो इसे वहां रखता है।

मुझे संदेह है कि इसे वहां रखा गया था ताकि लेखक पहली शर्त को झूठी होने के लिए मजबूर कर सके और फिर वह इसे हटाने के लिए भूल गया।

+0

ठीक है .. वह इसे हटाने के लिए भूल गया होगा। लेकिन वास्तव में 1 = 2 का मतलब क्या है ?? – Kings

5

यह एक सामान्य चाल है जो SQL फ़िल्टर खंडों के गतिशील निर्माण में उपयोग की जाती है। यह "T.Active = 'N' के स्वचालित निर्माण की अनुमति देता है और" निम्नलिखित खंड के लिए आवश्यक चेक के साथ, क्योंकि "1 = 2" हमेशा जोड़ा जाएगा।

अद्यतन: चाहे 1 = 1 या 1 = 2 प्रयोग किया जाता है संयोजक या वियोगी सामान्य रूप से स्वचालित खंड के निर्माण में इस्तेमाल किया जा माना जाता है, इस पर निर्भर करता है। इस मामले में, ऐसा लगता है कि डिजाइन और कार्यान्वयन का एक मेल नहीं है।

अद्यतन 2 मेरा मानना ​​है कि सबसे डेवलपर्स और द्वारा joind प्रमुख शर्तों से, संयोजक सामान्य रूप को पसंद करते हैं, लेकिन वियोगी सामान्य रूप सूचक क्षमता और कोड के आकार में बराबर है।

+0

आमतौर पर आप इसे 1 = 1 के साथ 1 = 2 के साथ नहीं करते हैं .. आप क्लॉज में 1 = 1 का उपयोग करते हैं ताकि अन्य सभी फ़िल्टर 'और x = y' –

+0

ओप्स के रूप में जा सकें! यह सच होगा, लेकिन स्वचालित निर्माण "AND" के बजाय "OR" के साथ समाप्त होना चाहिए। –

+0

हाँ .. बिल्कुल .. अगर वहां या उनके बीच होता तो आपका अनुमान सही होता। मुझे लगता है कि डीबग कारणों के लिए है। इसके अलावा क्योंकि 1 = 2 अंत में है .. और आप आमतौर पर इसे सामने रख देते हैं ताकि कथन का पालन किया जा सके। –

1

मुझे लगता है कि यह एक डीबग स्क्रिप्ट है। यह हमेशा मामले के नकारात्मक हिस्से को वापस करने के लिए है। शायद रिलीज पर वह हिस्सा निकाला जाता है।

13

WHERE खंड यदि आप किसी अन्य से एक टेबल बना रहे हैं के इस 1=2 भाग के लिए एक अच्छा उपयोग नहीं है, लेकिन आप किसी भी पंक्तियों को कॉपी नहीं करना चाहती। उदाहरण के लिए:

CREATE TABLE ABC_TEMP AS 
    SELECT * FROM ABC WHERE 1=2; 
1

1 = 2 का मतलब है कि हम एक शर्त दे रहे हैं जो हमेशा झूठी होगी; इसलिए आपकी पंक्तियों के लिए कोई रिकॉर्ड नहीं दिखाएगा ('न्यूल') ...

यानी तालिका empt_tgt बनाएं रूप empno का चयन करें, Ename, नौकरी, एमजीआर, साल जहां 1 = 2;

तो उस empt_tgt संभालने उन सभी स्तंभों के लिए रिकॉर्ड है जब हम निम्नलिखित बयान करते हैं: चुनें * से

empt_tgt

EMPT_TGT अशक्त हो जाएगा; जिसका अर्थ है कि हम केवल कॉलम नाम empno, ename, job, mgr, sal no data देखेंगे ...