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

संभावित अपरिभाषित मानों को संभालने के दौरान SQL चयन क्वेरी बनाने के लिए सर्वोत्तम अभ्यास

यह समस्या वही है जो यहां लॉग की गई थी:https://github.com /vitaly-t/pg-promise/issues/442

मूल रूप से, pg-promise क्वेरी स्वरूपण इंजन आपके स्वरूपण मापदंडों के अनुसार SQL उत्पन्न करता है। यह आपके परिणामी SQL पर कोई सिंटैक्स सत्यापन नहीं करता है।

आप IN () जनरेट कर रहे हैं , जो अमान्य SQL है, इसलिए आपको त्रुटि मिलती है।

आपको वेरिएबल की उपस्थिति की जांच करनी चाहिए, और वेरिएबल के गायब होने पर ऐसी कोई क्वेरी उत्पन्न करने का प्रयास भी नहीं करना चाहिए, क्योंकि तब आपकी क्वेरी कुछ भी अच्छा नहीं कर पाएगी।

उदाहरण:

router.get('/search', (req, res, next) => {
    const variables = ['variable_a', 'variable_b', 'variable_c'];
    const conditions = variables.filter(v => v in req.query)
        .map(v => pgp.as.format('$1:name IN ($2:csv)', [v, req.query[v]]))
        .join(' AND ');

    conditions = conditions && 'WHERE ' + conditions;

    db.any('SELECT * FROM food $1:raw', conditions)
        .then(result => res.send(result))
        .catch(error => {/* handle the error */});
});

अन्य समाधान भी हो सकते हैं, जैसे pg-promise बहुत सामान्य है, यह आपके इस दृष्टिकोण को सीमित नहीं करता है।

उदाहरण के लिए, इसके बजाय:

v => pgp.as.format('$1:name IN ($2:csv)', [v, req.query[v]])

आप यह कर सकते हैं:

v => pgp.as.name(v) + ' IN (' + pgp.as.csv(req.query[v]) + ')';

जो एक ही परिणाम देगा। जो आपको पसंद हो!;)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mac . पर Postgres.app इंस्टॉल करें

  2. plpgsql फ़ंक्शन में टैग की सरणी पास करें और इसे WHERE स्थिति में उपयोग करें

  3. PostgreSQL:स्तंभ परिभाषा सूची का उपयोग किए बिना तालिका से गतिशील पंक्तियों को कैसे वापस करें?

  4. SQLAlchemy के साथ PostgreSQL ILIKE क्वेरी

  5. हाइबरनेट के साथ स्प्रिंग जेपीए का उपयोग करके मौजूद नहीं होने पर स्कीमा बनाएं