2009-02-05 13 views
7

मैं कुछ प्रश्नों के माध्यम से जा रहा था, जो मैं बनाए रख रहा हूं, और एक प्रोग्रामर ने "जहां 1 = 1" मुझे प्रश्नों में डाल दिया है जो हमेशा सत्य का मूल्यांकन करता है।एक एसक्यूएल क्वेरी में "जहां 1 = 1"

क्या इसका कोई लाभ है?

डुप्लिकेट:Why would someone use WHERE 1=1 AND in a SQL clause?

यही सवाल इस प्रश्न का उत्तर नहीं है।

कहाँ-खंड:

select * from table where 1=1 and sStatus not in ('status1','status2','status3') 

नहीं प्रोग्रामिंग या स्टेटमेंट एक और वहाँ में पुश करने के लिए है। एक सीधी क्वेरी।

यदि आप इसे बंद कर सकते हैं, तो मैं जानना चाहूंगा कि कोई उद्देश्य है ताकि मैं अनावश्यक होने पर 1 = 1 को फिर से लिख और निकाल सकूं।

+0

कोई उद्देश्य जो मैं देख सकता हूं, और लिंक में स्वीकृत उत्तर द्वारा निर्णय लेता है ऐसा लगता है कि 1 = 1 को अनुकूलित किया जाएगा। शायद किसी ने थोड़ा कटाई प्रोग्रामिंग किया था। –

उत्तर

16

क्या यह गतिशील प्रश्न था? कभी-कभी वैकल्पिक होते हैं जो वैकल्पिक पैरामीटर के आधार पर गतिशील क्वेरी बनाते हैं।

1

मैं इस के दो कारण देखा है, जब आप हमेशा एक सच्चे परिणाम चाहते हैं, या जब वहाँ की एक मनमाना संख्या "और दशा = मूल्य" होने जा रहा है बयान

6

मैं के लिए इसका उपयोग करने के लिए संलग्न गतिशील जहां क्लॉज जब मैं कुछ आलसी प्रोग्रामिंग कर रहा हूं और यह हमेशा यह जांचना नहीं चाहता कि खंड खाली है या नहीं, यह निर्धारित करने के लिए कि अब मुझे अपने गतिशील खंडों के बीच "और" की आवश्यकता है या नहीं।

4

यह वास्तव में गतिशील प्रश्नों में केवल समझ में आता है। यदि आप एक लूप में पैरामीटर जोड़ रहे हैं तो यह जांचने के बजाय कि क्या कोई है, आप पहले से ही जोड़ सकते हैं और कॉलम = वैल्यू हर बार कर सकते हैं।

10

यदि आप गतिशील रूप से एक खंड बना रहे हैं, तो आप थोड़ा आलसी हो सकते हैं और मान लें कि आपके द्वारा जोड़े गए प्रत्येक खंड को "AND" के साथ उपसर्ग किया जा सकता है, उदा।

$str="select foo from bar where 1=1"; 

if ($filter1) 
{ 
    $str.=" and col1='frobozz'"; 
} 
0

यह बहुत दिलचस्प है ... WHERE खंड में 1 = 1 के अलावा कुछ भी नहीं है? मैंने इसे एसक्यूएल इंजेक्शन प्रयासों में अक्सर देखा है जिसमें WHERE क्लॉज को xyz="something" OR 1=1; पर हमेशा परिणामों की सूची लौटने के साधन के रूप में सेट किया गया है।

क्या आप हमें इस क्वेरी के साथ क्या चल रहा है इसके बारे में और बता सकते हैं ताकि हम प्रश्न का उत्तर बेहतर तरीके से दे सकें?

  • निकोलस
8

आप स्वचालित रूप से आपकी क्वेरी के लिए प्रतिबंध जोड़ने के लिए चाहते हैं, यह बनाता है अपनी लाइव आसान:

string sql = "SELECT * FROM table WHERE 1=1"; 

if (someflag) { 
    sql += " AND valid = 1"; 
} 

if (someotherflag) { 
    sql += " AND special = 1"; 
} 

execute(sql); 

WHERE 1 = 1 बिना आप प्रत्येक मामले में अगर यह जाँच करने के लिए होगा पहला प्रतिबंध जो आप जोड़ते हैं (और उसके बाद WHERE ... का उपयोग करें) या यदि आपने पहले से ही कुछ अन्य प्रतिबंध जोड़े हैं (और फिर AND ... जोड़ें)।

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