2012-04-26 20 views
6

मैं हमेशा एसक्यूएल प्रश्नों में ब्रैकेट का उपयोग करता हूं। लेकिन मैं उदाहरण है:पोस्टग्रेस्क्ल और ब्रैकेट

DELETE FROM prog 
WHERE (prog_start >= $1 AND prog_start < $2) 
    OR (prog_end > $1 AND prog_end <= $2) 

या नहीं:

DELETE FROM prog 
WHERE prog_start >= $1 AND prog_start < $2 
    OR prog_end > $1 AND prog_end <= $2 

यह करने के लिए बराबर है?

उत्तर

8

यह भाषा में "तार्किक ऑपरेटरों की प्राथमिकता" पर निर्भर है।

PostgreSQL में, AND ऑपरेटर अपने मामले में पर पूर्वता OR ऑपरेटर

तो लेता है, परिणाम एक ही हो जाएगा।

लेकिन मुझे लगता है कि यह कोष्ठक रखने के लिए यह बहुत आसान और स्पष्ट (रखरखाव!) है।

1

यह ऑपरेटर प्रीकेंडेंस http://www.postgresql.org/docs/6.5/static/operators.htm#AEN1615 के अनुसार चला जाता है।

जटिल स्थिति बनाने के लिए यह हमेशा आपकी परिस्थितियों को संतुलित करने के लिए बेहतर होता है।

+0

अच्छा विश्लेषण, लेकिन ... इस विशेष मामले पर गलत निष्कर्ष, नहीं? –

+1

6.5 संदर्भ के लिए थोड़ा पुराना संस्करण है। – vyegorov

+1

http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html#SQL-SYNTAX-OPERATORS (या/और ऑपरेटर प्राथमिकता परिवर्तन शायद वैसे ही सबसे सामान्य परिवर्तन नहीं हैं। ..) –

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