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

यदि कोई मेल नहीं खाता है तो पहले रिकॉर्ड का चयन करें

आप सही रास्ते पर हैं। बस एक order by :

SELECT street, zip, city
FROM address
WHERE street LIKE 'Test%' OR ord = 0
ORDER BY (CASE WHEN street LIKE 'Test%' THEN 1 ELSE 0 END) DESC
LIMIT 1;

या, वैकल्पिक रूप से:

ORDER BY ord DESC

इनमें से कोई भी ord = 0 डाल देगा अंतिम पंक्ति।

संपादित करें:

इरविन एक अच्छी बात सामने लाते हैं कि अनुक्रमणिका उपयोग के दृष्टिकोण से, एक OR WHERE . में खंड सबसे अच्छा तरीका नहीं है। मैं अपने उत्तर को निम्न के रूप में संशोधित करूंगा:

SELECT *
FROM ((SELECT street, zip, city
       FROM address
       WHERE street LIKE 'Test%'
       LIMIT 1
      )
      UNION ALL
      (SELECT street, zip, city
       FROM address
       WHERE ord = 0
       LIMIT 1
      )
     ) t
ORDER BY (CASE WHEN street LIKE 'Test%' THEN 1 ELSE 0 END) DESC
LIMIT 1;

यह क्वेरी को दो इंडेक्स (street .) का उपयोग करने की अनुमति देता है और ord ) ध्यान दें कि यह वास्तव में केवल इसलिए है क्योंकि LIKE पैटर्न वाइल्डकार्ड से शुरू नहीं होता है। अगर LIKE पैटर्न वाइल्डकार्ड से शुरू होता है, तो क्वेरी का यह रूप अभी भी एक पूर्ण तालिका स्कैन करेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में पावर () फ़ंक्शन कैसे काम करता है

  2. PostgreSQL में किसी मौजूदा तालिका में स्वत:वृद्धिशील प्राथमिक कुंजी कैसे जोड़ें?

  3. त्रुटि:केवल पढ़ने योग्य उपयोगकर्ता के रूप में चयन करने का प्रयास करते समय पोस्टग्रेज़ पर संबंध टैबलेटनाम के लिए अनुमति अस्वीकार कर दी गई

  4. मैं नोड-पोस्टग्रेज के साथ पीजी में कई पंक्तियों को ठीक से कैसे सम्मिलित करूं?

  5. PostgreSQL में एक तिथि में सप्ताह जोड़ें